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

1.
int a{ld}, b = {ld}; // error: narrowing conversion required
int 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 will
complain 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_int	0	
		global_str	""	
		local_int	-858993460	
+		local_str	""	

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值