我想知道标准对以下代码的含义。可以在调用string
之前执行临时对象的printPointer
析构函数吗?
ps。 VS2010编译器不会提示此代码,并且可以正常工作。
void printPointer(const string* pointer)
{
cout << *pointer << endl;
}
const string* func(const string& s1)
{
return &s1;
}
int main()
{
printPointer(func("Hello, World!!!"));
}
最佳答案
否,因为临时对象将在评估完整表达式的最后一步被破坏,该表达式包含创建对象的位置,这意味着它将持续到调用printPointer()
结束为止。
从标准#12.2/4 Temporary objects[class.temporary]:
和#12.2/6 Temporary objects[class.temporary]:
explanatory demo