我得到了一段void()用作参数的代码.代码不编译......很明显?
我们可以实例化任何类型的东西void吗?我相信答案是否定的,除了a void*.例如:
void askVoid(void param) {}错误:参数可能没有
void类型
void askNaught() {}并使用askNaught(void())`错误调用它:错误C2660 ::
takeNaught函数不带1个参数
template <typename T> void takeGeneric(T param) {}并调用它有takeGeneric(void())错误:错误C2893:无法专门化功能模板
void takeGeneric(T)
void voidType错误:不允许使用不完整的类型
auto autoVoid = void()错误:不能推断出
auto类型
void* voidPtr工作正常,但remove_pointer_t<decltype(voidPtr)> decltypeVoid错误:错误C2182 ::
decltypeVoid非法使用类型void
就是这样,对吧?void()C++中没有地方可供选择吗?这只是我给出的错误代码,对吧?
tob*_*spr 11
您可以使用void()as函数参数:
void test(void()) { ... }
Run Code Online (Sandbox Code Playgroud)
其中扩展为:
void test(void (*)())
Run Code Online (Sandbox Code Playgroud)
这是一个返回void并且不带参数的方法的函数指针.
完整示例:
void abc() {}
void test(void()) { }
int main() {
test(abc);
}
Run Code Online (Sandbox Code Playgroud)
edm*_*dmz 11
C++(我说C++,而不是C)允许带有返回类型的(§6.6.3逗号2)函数void返回一个void表达式,即:
void foo() { return void(); }
Run Code Online (Sandbox Code Playgroud)
但请注意,它不是构建一个临时的void!
表达式void()是类型的prvalue,void可以在任何可以使用的表达式中使用,[basic.fundamental]/9有助于提供列表:
void();true ? throw 1 : void()++it1, void(), ++it2decltype或的操作数noexcept:using my_void = decltype(void()); static_assert(noexcept(void()), "WAT");return返回函数的语句中(可能是cv-qualified)void:const void f() { return void(); }void:static_cast<const void>(void())类型的表达式void也可以用作操作数typeid,但void()特别是在此上下文中将其解析为类型而不是表达式.
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |