C++类型初始化总结

C++中各种初始化方式:默认初始化、值初始化、直接初始化、拷贝初始化、列表初始化。

1、默认初始化

默认初始化时定义变量的时候没有指定初值进行的初始化操作。

  1. 对于内置类型

    //全局变量默认初始化为特定的值
    int a;    // 默认初始化为0
    double d;   //默认初始化为0.0
    int *ptr;   //默认初始化为NULL
    
    //局部变量则是未定义的
    {
       	int a;   //未定义的
    }
    
  2. 类类型的变量

    不论定义在什么地方都会被初始化,调用默认的构造函数。

    class A {
        public:
        	A() = default;
    };
    
    A a;   //默认调用 A()
    

    如果类没有默认构造函数,则会引发错误。如果没有定义构造函数,编译器会默认生成一个构造函数。如果有了构造函数,编译器则不会提供,所以一般会显示写出构造函数。

2、值初始化

值初始化时使用了初始化器(使用圆括号或者花括号),但没有提供初始化值的情况。

int *ptr = new int();   //同默认初始化
vector<string> vec(10);  // size=10, 没有对元素赋值  调用默认初始化
3、直接初始化和拷贝初始化

直接初始化使用小括号,内部一定要提供初始,否则就是值初始化。

int a(10);
string s("hello");

拷贝初始化使用等号=:

int a = 12;
string s = string("hello");
string s1 = "hello world";  //编译器会把等号右侧的初始值拷贝到新建的对象中,与上面的相同

对于类类型变量,直接初始化调用类的构造函数(调用参数类型最匹配的那个)。

拷贝初始化调用类的拷贝构造函数

4、列表初始化

列表初始化时C++11引入的,采用{}进行初始化操作。

int a{12};
string s{"hello"};
vector<int> vec{1, 2, 3};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值