如果不使用<iostream>,可以避免使用它吗?

时间:2019-01-29 15:27:13

标签: c++ debugging optimization c-preprocessor iostream

我想优化这段代码:

#include <iostream>

#define LOG if(true) {} else std::cerr

LOG << "test" << std::endl;

由于编译器不会忽略else块,并且需要包含<iostream>,因此我可以使用与std::cerr相比更便宜的功能,包括比{{1}更简单的标头}?

2 个答案:

答案 0 :(得分:2)

这样的事情怎么办?

if

std::endl下的代码将被编译,但不会执行。

此“空流”的实现相当差,但存在一些问题(例如,不能使用dependencies { implementation 'com.github.bumptech.glide:glide:4.8.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0' } )。 Boost中有更好的实现,但是我怀疑为这样一个简单的功能引入Boost是有意义的。

答案 1 :(得分:0)

  

如果不使用其功能,可以避免包含吗?

不。不使用功能是不够的。

除了不使用函数外,还不能使用其他声明,例如变量(例如std::cerr,模板和类型)。同样,在这种情况下,“使用”表示对声明的标识符的任何提及-仅仅因为在运行时不会采用特定分支并不意味着代码不需要格式正确。 <iosfwd>中声明了一些模板,因此可以在不包含其定义的情况下以有限的方式使用它们。

  

我想优化这段代码:

您的程序没有运行时行为,因此您可以将其优化为:

// nothing