【问题标题】:Can auto using parens mean a function prototype?auto 使用括号可以表示函数原型吗?
【发布时间】:2011-07-19 12:48:13
【问题描述】:

这个问题是由于无法将统一初始化语法与auto 关键字一起使用,因为它将其视为std::initializer_list<T>(cmets 中的解释here)。

以下面的代码为例:

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

编译器对auto x做了什么?

对每种可能性进行推理:

复制/移动构造:我认为这是正确的行为,因为 (1) 被视为一种缺陷。

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

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

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

【问题讨论】:

    标签: c++ function c++11 type-inference


    【解决方案1】:

    我明白了

    error: 'x' function uses 'auto' type specifier without late return type
    

    编译器期望类似

    auto x( X() ) -> int;
    

    相当于第 2 行。

    【讨论】:

    • 这听起来与旧的 C++98 行为一致,所以这是一件好事。如果你想从一个临时的X 构造x,你应该说auto x((X()));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2023-03-28
    相关资源
    最近更新 更多