列表初始化{}

        无论是初始化对象还是某些时候为对象赋新值,都可以使用这样一组由花括号括起来的初始值了,当使用内置类型的变量时,这种初始化形式有一个重要特点,如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器报错

long double ld = 3.1415926536
int a{ ld }, b = { ld };       //错误:转换未执行,因为存在丢失信息的危险
int c(ld), d = ld;              //正确:转换执行,且确实丢失了部分之

列表初始化返回值:

        c++11规定函数可以返回花括号包围的值的列表,类似于其他返回结果,此处的列表也用来表示函数返回的临时量进行初始化,如果列表为空,临时量执行值初始化,否则,返回的值有函数的返回类型决定。如果函数返回的是内置类型,则花括号包围的列表最多包含一个值,而且该值所占空间不应该大于目标类型的空间

vector<string> process()
{
	//...
	//expectd和actual是string对象
	if (expected.empty())
		return{};	//返回一个空vector对象
	else if (expected == actual)
		return{ "functionX","okay" };  //返回列表初始化的vector对象
	else
		return{ "functionX",expected,actual };
}

初始化动态分配对象的数组:
可以对数组中的元素进行值初始化,方法是在大小之后跟一对空括号,虽然我们用空括号对数组中元素进行值初始化但不能在括号中给出初始化器。

int* pia2 = new int[10]();  //10个值初始化为0的int
//如果初始化器数目大于元素数目,则new表达式失败,不会分配任何内存
//10个int分别用列表中对应的初始化器初始化
int* pia3 = new int[10]{ 0,1,2,3,4,5,6,7,8,9 };
//10个string,前4个用给定的初始化器初始化,剩余的进行值初始化
string* psa3 = new string[10]{ "a","an","the",string(3,'x') };

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值