#include <sstream>
#include <iostream>
#include <string>
class A : public std::stringstream {
public:
A() {}
~A() { std::cout << str().c_str() << std::endl; }
};
int main() {
A() << "Foo" << std::string(" ABC");
}
我原本打算打印这个程序:
Foo ABC
而不是
0x401bad ABC
为什么打印 0x401bad ABC ?
g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
答案 0 :(得分:7)
operator<<
分两部分实施:
std::ostream
。我们担心该字符串文字的first one。正如您在链接中看到的,所有重载都采用对std::ostream
的非const引用。这意味着您的临时A()
不适合。因此,member function使用了const void*
。
C ++ 11增加了对std::ostream
的rvalue引用的支持,用于接受临时对象的泛型const T &
参数,因此在使用C ++ 11进行编译时会打印字符串文字。< / p>