在此示例中,最后一行无法编译。我明白为什么,但我想知道如何让编译器理解我想调用
Class(const int &)
来创建一个未命名的实例,而不是尝试调用未定义的默认构造函数并创建一个名为 i
: 的实例
struct Class {
Class(const int &) {}
};
void foo() {
int i;
// Works
Class(int(i));
// Fails
Class(i);
}
您需要使用大括号初始化,以便语法不会认为您正在尝试创建类型为
i
、名为 Class
的对象。对你来说这意味着
Class{i};
将创建一个未命名的临时对象,该对象将在完整表达式结束时被销毁。