我对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/