C++ primer.Fifth Edition. PartI,2,Variable Initialization

来源:互联网 发布:mac 固定便签在桌面上 编辑:程序博客网 时间:2024/06/05 12:41
1.
int a{ld}, b = {ld}; // error: narrowing conversion requiredint c(ld), d = ld; // ok: but value will be truncated
()是调用了类型的构造函数初始化,对于内置类型来说,编译器有默认的构造函数,类似这样:struct int {  int (const int&);  int (const double&);  ...  four bytes data;};题主的变量c的初始化,就是调用了其中的一个构造函数(double),所以不会出现警告。 而 {}初始化的方法,仅被最新的C++11标准支持,有个专门的术语:initializer-list,题主可以去查查资料。这种方法没有使用构造函数,所以凡是能导致精度降低、范围变窄等等的初始化情况,统称为 narrowing conversion,编译器都会警告.
2,build-in type,内置类型,例如,float,char,int等,相对于用户自定义式,user-defined type。
3.defalt initialization
Some classes require that every object be explicitly initialized. The compiler willcomplain if we try to create an object of such a class with no initializer.
Variables defined outside any function body are initialized to zero.
4.double salary = wage = 9999.99;
wage 未初始化
5.std::string global_str;int global_int;int main(){int local_int;std::string local_str;}
global_int0
global_str""
local_int-858993460
+local_str""
                                             
0 0