c++ - 为什么我可以通过在 C++ 中分配整型常量来初始化 Test 类的对象?

标签 c++

这是我的 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/

相关文章:

c++ - 使用 C++ 进行多任务处理。线程或不同的设计?

java - 如何将cocos2d ValueMap作为HashMap发送给Java?

c++ - 如何正确地进行显式模板实例化?

c++ - 将 T 数组别名为 std::complex<T> 数组合法吗?

c++ - 现有的 C++ *nix 系统库?

c++ - 在 OpenGL 中存储模型矩阵的最佳位置?

c++ - 如何使用 typename 而不是 typedef?

c++ - 在变量中存储异构类类型

c++ - 在 Qt3D 中访问帧缓冲区

c++ - Boost::signals2::signal::connect 的原型(prototype)是什么