C++临时对象那些事儿

        C++大概是这个世界上最飘逸、成功、失败的语言吧,临时对象是C++语言中最复杂的东西之一。

以下代码段新手大概经常会写吧:

std::string FetchFormat(){
	return "%d";
}


int main(){
	printf(FetchFormat().c_str(), 100);
}
这个代码在大多数时,会跑得“很好”,然而,如果有一天你听到崩溃的碎片声,你也不应有任何不快。在这个程序中使用了一个从FetchFormat()调用返回的临时对象,在main函数中调用printf时,对第一个参数求值完成时,这个临时对象可能被析构,如果这个临时对象被析构,当进入printf函数体内时,自然地会崩溃了。

        C++中对临时对象的定义为:一切非显式定义和生成的对象均为临时对象。至于临时对象何时被析构呢,根据《C++语言的设计与演化》知道,历史上对这个问题曾经有很多的争议,也提出过很多建议,最后老大发话了,在生成临时对象的最大表达式结束处即是临时对象的析构处(EOS,end of statement)。

        至于什么时表达式,C++标准中对将表达式定义为:由操作数、操作符、函数调用构成的式子。int x = 1;int x, y;

double xxx࿱

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值