说起C++成员变量的初始化,猴子们第一时间就会联想到构造函数。除非成员变量是静态的int,enum类型的常量,我们可以在类的声明中就地“=”号初始化。其余成员变量必须在构造函数中初始化。看图:
C++11给成员变量的初始化带来了新的途径。新标准支持成员变量通过"="和"{}"就地初始化。什么意思?上图:
就是说在C++11中我们可以在类的声明中直接初始化成员变量。但是请注意 str的初始化是error,因为初始化只支持"= {}"并不支持"()"。
再说说成员变量num1,,如果我定义变量Init tem(10,10);那么temp.num1 = ?;我在类的声明里给num1=1,同时num1也在构造函数的初始化列表中。那么num1最终的值是多少呢?答案是temp.num1 = 10; 原因很简单,构造函数的初始化列表优先于就地赋值初始化。
说了半天,这个新特性有什么用呢?上图:
看见了吧,新特性使得当类有多个重载版本的构造函数时初始化成员变量更方便。即使没有重载版本的构造函数,就地初始化也大大简化猴子的工作。
抄袭自—《深入理解C++11》
欢迎纠正,欢迎补充。拍砖的不要。
有的旅行时为了寻找逝去的年华,重温青春的惆怅。