临时人员的一生下面的代码工作正常,但为什么这是正确的代码?为什么foo()返回的临时指针“c_str()”有效?我想,输入bar()时,这个临时的部分已经被销毁了-但是它似乎不是这样的。那么,现在我假设foo()返回的临时数据将在调用bar()之后销毁-这是正确的吗?为什么?std::string foo() {
std::string out = something...;
return out;}void bar( const char* ccp ) {
// do something with the string..}bar( foo().c_str() );
2 回答
MYYA
TA贡献1868条经验 获得超4个赞
$12.2/3-“临时对象被销毁,作为评估完整表达式(1.9)的最后一步,这个表达式(在词汇上)包含创建它们的点,即使该评估以抛出异常结束也是如此。”
$1.9/12-“一个完整表达式不是另一个表达式的子表达式,如果一个语言结构被定义为产生一个函数的隐式调用,那么就这个定义而言,语言结构的使用被认为是一个表达式。”
扬帆大鱼
TA贡献1799条经验 获得超9个赞
当在词汇上包含其计算结果所创建的临时对象的rvalue的完整表达式被完全计算时,临时对象将被销毁。让我用ASCII的艺术来演示:
____________________ full-expression ranges from 'b' to last ')'
bar( foo().c_str() );
^^^^^ ^
| |
birth funeral
- 2 回答
- 0 关注
- 286 浏览
添加回答
举报
0/150
提交
取消