这是我的 C++ 代码
#include<iostream>
class Test{
int i;
public:
Test() { }
Test(int i){
std::cout << "Constructor called" << std::endl;
this->i = i;
}
void print(){
std::cout << i << std::endl;
}
};
int main(){
Test t = 3;
t.print();
return 0;
}
当 Test t = 3;
起作用时,我感到很有趣。我不明白为什么它没有给出编译错误。
我的印象是,Test
类的对象应该通过以下方式之一创建。是否还有其他方法来创建 Test
类的对象,这些方法未在以下列表中涵盖?
Test t1;
Test t2(2);
Test t3 = Test(3);
Test t4(t3);
Test t5 = Test(t4);
Test t6{2};
Test t7 = Test{3};
Test t8{t3};
Test t9 = Test{t4};
Test t10 = {10};
最佳答案
此语法:
Test t = 3;
是 copy-initialization 的一种形式。这样做的效果是选择最佳的用户定义转换序列来初始化t
。在这种特殊情况下,您提供了一个转换构造函数 Test(int)
,它是最佳匹配并被调用。
关于c++ - 为什么我可以通过在 C++ 中分配整型常量来初始化 Test 类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63299964/