首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

临时对象的有关问题

2013-07-08 
临时对象的问题class LoggingMessage { public:LoggingMessage() { stream_ test std::endl }~Lo

临时对象的问题
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对象没有被创建

热点排行