【发布时间】:2015-12-11 10:18:09
【问题描述】:
有一些情况:
案例一:
string("test");
int i = 1;
这是一个临时对象。我们一到达int i = 1;,它就会被销毁。我说的对吗?
案例2:
const char * p = string("test").c_str();
int i = 1;
cout<< p;
我认为当我们到达int i = 1; 时 p 会指向一个非法内存。但我总是可以cout 正确的字符串。我只是幸运还是 p 不违法?
案例3:
void fun()
{
throw Exception("error");
}
int main()
{
try
{
fun();
}catch(const Exception & e)
{
cout << e.description();
}
}
我们可以在函数中throw 一个临时对象并在其更高级别的函数中使用 const 引用捕获它吗?
【问题讨论】:
-
您知道,您可以轻松地检查所有这些情况,只需实现这些情况,然后调试应用程序...
-
@rbaleksandar 不是。您最终可能会得到一些似乎适用于您的特定编译器和运行时但实际上是未定义行为的东西。
标签: c++ temporary-objects