千家信息网

C++11 初始值{}与()的区别

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,#include #include using namespace std;/* * A1 类对象成员变量的默认值; *//B1 初始值列std::initializer_list * B2 使用初
千家信息网最后更新 2025年01月23日C++11 初始值{}与()的区别
#include #include using namespace std;/* *  A1 类对象成员变量的默认值; *//B1 初始值列std::initializer_list * B2 使用初始值列initializer_list * * * */class Hello{        char* hello = 0;//A1 类对象成员变量的默认值;public:        ~Hello();        Hello(const char* h);        Hello(const char* h,const char* j);        Hello(std::initializer_list);//B1 初始值列        Hello(const Hello &obj);};Hello::Hello(const Hello &obj){        cout <<"call copy constructor "< vals){        char* x=(char*)vals.begin();        hello=strdup(x);        cout <<__func__<<":" <<__LINE__<<" Hello(std::initializer_list)"<hello)                free(this->hello);}#endifint main(){        int a{0};        int b(0);//      int c{0.3}; error 不可窄化        int d(0.3);        Hello H1("H1","H1");        Hello H2{"H2","H2"}; //B2 使用初始值列initializer_list        Hello H3{"H2","H2","XX"}; //使用初始值列initializer_list        return 0;}

总结:
int b(1.4)可以窄化与类型转换。{}不可以。
初始化用户自定义的类对象时,{}会优先使用initializer_list的构造函数。

0