我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();
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*our 11
这条线到底是做什么的
它X通过调用默认构造函数创建一个临时的,初始值的函数,然后使用它初始化一个Y变量,调用const X&转换构造函数.
哪里是连接到最烦恼的解析
如果您尝试使用旧式初始化语法来编写此内容
Y y (X());
Run Code Online (Sandbox Code Playgroud)
那么所谓的"最令人烦恼的解析"会把它解释为一个函数,而不是一个变量声明:一个函数调用y,返回类型Y和单个参数,其类型是(指向a)函数返回X.
您可以添加额外的括号,以便它不能被解释为函数声明:
Y y ((X()));
Run Code Online (Sandbox Code Playgroud)
或者,从C++ 11开始,您可以使用大括号初始化作为示例.
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |