【问题标题】:Counter at Compile TIme [duplicate]编译时间的计数器[重复]
【发布时间】:2015-01-14 20:09:47
【问题描述】:

我知道这是一个奇怪的问题,但我正在尝试找到一种方法来分析用户编写的代码并收集一些可能包含在“if”和“else”部分中的有用信息。 假设我有一个 if-else 语句,

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

是否有可能我可以“强制 ++counter”工作并在编译时获得“counter = 2”?模板?宏?还有其他解决方案吗?提前致谢!

【问题讨论】:

标签: c++ templates compile-time


【解决方案1】:

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

我会说大约 90% 的当前 C++ 编译器(以“发布”模式运行)将识别不变量,并生成目标代码,就像您编写的一样:

counter = 0;
++counter;

大多数人也会走得更远

counter = 1;

但是,标准不要求此类优化,因此无法“强制”编译器执行这些优化。

注意:Java 和 C# 的规范确实要求这些语言的编译器能够识别不变量,以省略 if())

【讨论】:

    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2012-10-15
    • 2015-09-15
    • 1970-01-01
    • 2012-06-22
    • 2012-10-04
    相关资源
    最近更新 更多