【发布时间】:2019-05-20 17:28:27
【问题描述】:
测试代码:
#include <iostream>
#include <sstream>
int main() {
std::ostringstream q;
std::cout << (dynamic_cast<std::ostringstream&>(q<<"hello"<<101).str()) << "\n";
std::cout << (dynamic_cast<std::ostringstream&>(std::ostringstream()<<"hello"<<101).str()) << "\n";
return 0;
}
编译:g++ test.cpp 输出:
hello101
hello101
编译:g++ -std=c++98 test.cpp 输出:
hello101
0x4b2ec0101
看起来第二个字符串包含指向“hello”字符串的指针,而不是字符串本身。为什么? 是c++98标准的一些“特性”还是gcc中的bug?
【问题讨论】:
-
在表达式中创建的临时对象不会被销毁,直到整个表达式完成时(即到达
;)超出范围。
标签: c++