临时对象的问题
class LoggingMessage {
public:
LoggingMessage() { stream_ << "test" << std::endl; }
~LoggingMessage() { std::cout << stream_.str(); }
std::ostream& stream() { return stream_; }
private:
std::ostringstream stream_;
};
#define LAZY_STREAM(stream, condition) \
!(condition) ? (void) 0 : (stream)
int _tmain(int argc, _TCHAR* argv[]) {
LAZY_STREAM(LoggingMessage().stream(), 0);
system("pause");
return 0;
}
输出结果:没有输出(LoggingMessage()没有析构?)
LAZY_STREAM(LoggingMessage().stream(), 0);是把LoggingMessage()置为空还是其他?
求详细解答
[解决办法]
!(condition) ? (void) 0 : (stream)
LAZY_STREAM(LoggingMessage().stream(), 0);
宏展开一下,
变成: !(0) ? (void)0 : (LoggingMessage().stream())
没走 Logging , 所以没有析构。
[解决办法]
LAZY_STREAM(LoggingMessage().stream(), 0);
预编译替换为 !(0) ? (void) 0 : (LoggingMessage().stream())
!(0)始终为真,LoggingMessage().stream()根本没有被运算,LoggingMessage对象没有被创建