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?