C++中以{}方式初始化时进行的转换(C++11)

C++中以{}方式初始化时进行的转换(C++11)

C++11将使用大括号的初始化称为列表初始化(list-initialization),因为这种初始化常用于给复杂的数据类型提供值列表。与程序清单13.3所示的初始化方式相比,它对类型转换的要求更严格。具体地说,列表初始化不允许缩窄(narrowing),即变量的类型可能无法表示赋给它的值。例如,不允许将浮点型转换为整型。在不同的整型之间转换或将整型转换为浮点型可能被允许,条件是编译器知道目标变量能够正确地存储赋给它的值。例如,可将 1ong 变量初始化为 int值,因为1ong 总是至少与int 一样长;相反方向的转换也可能被允许,只要int变量能够存储赋给它的long常量:

const int code=66;
int x=66;
char cl{31325};// narrowing,not allowed
char c2 = {66};// allowed because char can hold 66
char c3 {code}; // ditto
char c4 = {x}; // not allowed,x is not constant
x= 31325;
char c5=x; //allowed by this form of initialization

在上述代码中,初始化 c4时,您知道x的值为66,但在编译器看来,x是一个变量,其值可能很大。
编译器不会跟踪下述阶段可能发生的情况:从x被初始化到它被用来初始化c4。

对C++感兴趣的朋友点这里:C/C++课程

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值