Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;,GCC:避免对无用表达式求值_C++_Templates_Gcc_Macros_Evaluation - Fatal编程技术网

C++ C++;,GCC:避免对无用表达式求值

C++ C++;,GCC:避免对无用表达式求值,c++,templates,gcc,macros,evaluation,C++,Templates,Gcc,Macros,Evaluation,我用一个操作符定义了一个Debug类(类似于Qt中的qDebug),我不确定在没有宏的情况下如何实现这一点。以下是一个类似于google glog中使用的宏,仅供参考: #define LOG (quiet) ? (void)0 : your_logging_object 其中,quiet是一个布尔值。然后在代码的其他地方: LOG << some_var; LOG我不知道没有宏怎么能做到这一点。以下是一个类似于google glog中使用的宏,仅供参考: #define LOG

我用一个
操作符定义了一个
Debug
类(类似于Qt中的
qDebug
),我不确定在没有宏的情况下如何实现这一点。以下是一个类似于google glog中使用的宏,仅供参考:

#define LOG (quiet) ? (void)0 : your_logging_object
其中,
quiet
是一个布尔值。然后在代码的其他地方:

LOG << some_var;

LOG我不知道没有宏怎么能做到这一点。以下是一个类似于google glog中使用的宏,仅供参考:

#define LOG (quiet) ? (void)0 : your_logging_object
其中,
quiet
是一个布尔值。然后在代码的其他地方:

LOG << some_var;

LOG不要将你的东西命名为
\u这是为实现保留的。编译器如何知道var.name()正在执行有效的操作或不需要编译的操作?C++11?传递仅在调试模式下执行的lambda函数?尽管如此,我总是使用
DEBUG&&cout表达式是否得到计算是否重要?如果最终函数调用什么都不做,那么优化器应该注意这一点。然后应用专门化。@Kerrek:如果表达式调用库或外部模块中的函数,编译器可能没有足够的信息来优化它。不要像
\u This
这样命名,它是为实现保留的。编译器如何知道var.name()所做的事情是有效的还是不需要编译的?C++11?传递仅在调试模式下执行的lambda函数?尽管如此,我总是使用
DEBUG&&cout表达式是否得到计算是否重要?如果最终函数调用什么都不做,那么优化器应该注意这一点。然后只应用专门化。@Kerrek:如果表达式调用库或外部模块中的函数,编译器可能没有足够的信息对其进行优化。跳过条件编译,并使用变量作为三元运算符控制表达式。@thesamet:在我的代码中,我有类似于:
auto dbg=Debug(); 而(…)dbg将
#定义dbg(安静)?(void)0:your_real_dbg
do?跳过条件编译,并使用一个变量作为三元运算符控制表达式。@Samet:在我的代码中,我的代码类似于:
auto dbg=Debug();而(…)dbg将
#定义dbg(安静)?(无效)0:您的真实dbg
do?