c++ - 我可以避免包括如果我不使用它的功能?
问题描述
我想优化这段代码:
#include <iostream>
#define LOG if(true) {} else std::cerr
LOG << "test" << std::endl;
由于编译器不会忽略 else 块,并且需要<iostream>
包含在内,因此我可以使用与 相比“更便宜”的函数std::cerr
,包括与相比更简单的标头<iostream>
吗?
解决方案
这样的事情呢?
#ifdef DO_LOG
#include <iostream>
#define LOG std::cerr
#else
class nullstr {};
template<typename T>
nullstr operator<<(nullstr s, T const&) { return s; }
#define LOG if (false) nullstr()
#endif
下的代码if
将被编译,但不会被执行。
然而,这个“空流”的实现相当糟糕,有一些问题(例如不能使用std::endl
)。Boost 中有一个更好的实现,但我怀疑为这样一个简单的功能引入 Boost 是否有意义。
推荐阅读
- angular - chromedriver 未知错误:无法为用户数据目录创建临时目录 (80.0.3987.16)
- keras - Keras:使用生成器输出训练集批次和目标,以及不用于训练的辅助数据
- wpf - WPF,将焦点设置在 TabControl 的内容上
- linux - Apache Web 服务器 LDAP - 如何允许非 ldap 用户访问?
- iis - 服务器上的 Request.Form 为空而不是 localhost
- spring - 如何配置 Spring Boot 应用程序以使用两个消息属性文件?
- regex - 正则表达式 - 删除第一个字母直到第一个元音
- java - Java从文件名中的日期查找目录中的最新文件
- php - 通过 PHP 下载并保存目录中的缩放记录
- r - 随机选择 x % 次