#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();
}
Question : According to the C++17 standard, what is the output of this program?
Answer: compilation error
Y y(X());//被认为是一个函数的声明,这个函数返回Y的对象,那么如何让编译器认为这是创建对象呢?
Y y{X()};
此时函数运行结果是:
当然你也可以这样:
Y y((X()));
即明确指定了X()
是一个构造一个类型为X
的临时对象的表达式,然后将其作为参数传递给Y
的构造函数。