我对Y y {X{}};感到困惑,这行到底是做什么的,以及它与最烦人的解析之间的联系是什么。一个简短的解释是赞赏:

#include <iostream>

struct X {
  X() { std::cout << "X"; }
};
struct Y {
  Y(const X &x) { std::cout << "Y"; }
  void f() { std::cout << "f"; }
};
int main() {
  Y y {X{}};
  y.f();
}

最佳答案



它创建一个临时的X,通过调用默认构造函数对其进行值初始化,然后使用它来初始化Y变量,并调用const X&转换构造函数。



如果您尝试使用老式的初始化语法编写此代码

Y y (X());

那么所谓的“最令人烦恼的解析”将把它解释为一个函数,而不是一个变量声明:一个名为y的函数,其返回类型为Y和一个参数,其类型为返回X的(指向a的)函数。

您可以添加额外的括号,以便不能将其解释为函数声明:
Y y ((X()));

或者,从C++ 11开始,您可以像示例一样使用大括号初始化。

关于c++ - 最令人讨厌的解析C++ 11,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28094774/

10-11 18:27