自动使用parens是否意味着函数原型?

7 c++ type-inference function c++11

这个问题产生于无法对auto关键字使用统一初始化语法,因为它将其视为std::initializer_list<T>(在此处的注释中的解释).

请使用以下代码示例:

class X { };
int x( X() ); // function prototype (1)
auto x( X() );  // copy/move construction of an X, function prototype or compile-time error?
Run Code Online (Sandbox Code Playgroud)

编译器用什么做auto x

推理每种可能性:

复制/移动构造:由于(1)被视为一种缺陷,我可以看到这是正确的行为.

函数原型:似乎不太可能,因为没有尾随返回类型.

编译时错误:如果编译器将其解析为函数原型,则由于缺少尾随返回类型,可能会导致编译时错误.

C++ 0x标准说这应该被解释为什么?

Bo *_*son 6

我明白了

error: 'x' function uses 'auto' type specifier without late return type
Run Code Online (Sandbox Code Playgroud)

编译器期待类似的东西

auto x( X() ) -> int;
Run Code Online (Sandbox Code Playgroud)

这相当于第2行.

  • 这听起来与旧的C++ 98行为一致,所以这是件好事.如果你想从一个临时的`X`构造`x`,你应该说`auto x((X()));`. (2认同)