Compile TIme的反击

时间:2014-11-17 19:50:10

标签: c++ templates compile-time

我知道这是一个奇怪的问题,但我试图找到一种方法来分析用户编写的代码,并收集可能包含在" if" &安培; "其他"部分。 假设我有一个if-else语句,

counter = 0;
if( true )
    ++counter;
else
    ++counter;

我是否可以强制执行++ counter"工作并获得" counter = 2"在编译时?模板?宏?还有其他方法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

首先,`counter'永远不会是2.它永远是1。

我说大约90%的当前C ++编译器(在" Release"模式"中运行)将识别不变量,并生成目标代码,就像你写的那样:

counter = 0;
++counter;

大部分也会达到

counter = 1;

但是,标准不要求进行这样的优化,因此无法强制使用#34;一个编译器来完成它们。

注意:Java和& Sons的规范。 C#要求这些语言的编译器识别不变的if()}