问题标签 [compile-time]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2789 浏览

c++ - 类型名称的 typeid 是否总是在 C++ 中的编译时评估?

我想检查 typeid 在与类型名称(即 typeid(int)、typeid(std::string)...)一起使用时在编译时进行评估。

为此,我在一个循环中重复了两个 typeid 调用的比较,并在启用优化的情况下对其进行编译,以查看编译器是否简化了循环(通过查看执行时间是 1us 时它简化而不是 160ms 时它不是)。

我得到了奇怪的结果,因为有时编译器简化了代码,有时却没有。我使用 g++(我尝试了不同的 4.x 版本),程序如下:

出现此问题的条件尚不清楚,但是:
-如果不涉及继承,则没有问题(始终在编译时)
-如果我只进行一次比较,则没有问题
-问题仅在比较分离时出现,如果所有的条款都是假的

那么在 typeid 的工作原理上是否有一些我没有得到的东西(当与类型名称一起使用时,它是否总是应该在编译时进行评估?)或者这可能是评估或优化中的 gcc 错误?

关于上下文,我将问题追溯到这个非常简化的示例,但我的目标是将 typeid 与模板类型一起使用(因为无法实现部分函数模板特化)。

谢谢你的帮助!

0 投票
7 回答
159 浏览

for-loop - for循环条件的最佳实践

在这种情况下,什么被认为是最佳做法?

或者

假设我不想从某个方向迭代,而是在数组的裸长度上迭代。另外,我不打算改变循环体中数组的大小。

那么,array.length()编译过程中会变得不变吗?如果没有,那么第二种方法应该是要采用的方法..

0 投票
3 回答
321 浏览

c# - 使用指令组织,重新运行测试?

在提交之前,我更喜欢在我的 C# 解决方案中运行所有数百个单元测试,因为它们只需要几分钟即可运行。但是,如果我已经全部运行它们,一切都很好,然后我决定using在我的解决方案中组织指令,是否真的有必要重新运行单元测试?我有一个宏,它遍历解决方案中的所有文件,并在每个文件上运行 Visual Studio 的“删除和排序”命令。据我了解,只要所有项目在using指令更改后仍然构建,运行时也应该没问题。这是正确的想法吗?

0 投票
1 回答
2265 浏览

java - 获取java类的编译时间戳

是否可以可靠地确定本地运行的 java 应用程序以及作为 applet 和/或 JNLP webapps 的给定类的编译时间戳?

0 投票
10 回答
3786 浏览

java - 在编译时禁用 Java 日志记录

我有一些 Java 代码,我想使用日志消息进行调试以进行调试。但是,最终(编译的)生产代码不应包含任何日志记录,因为它会减慢执行时间。Java中有什么方法可以在编译时禁用记录器吗?

我不害怕在运行时启用/禁用记录器的日志方法中添加的足迹检查。

但我想避免在我的生产代码中进行如下参数构造:

我正在使用 Sun 的 Java 编译器。

0 投票
5 回答
5039 浏览

delphi - Delphi {$IFDEF CONSOLE} 问题

我刚试过

并希望beep在运行时听到 a,但不是。但是,以下测试有效:

为什么编译时测试不起作用?据我从这个文档中了解到的,它肯定可以工作。

0 投票
1 回答
422 浏览

c++ - 动态哈希->类标签

我有:

哈希来自自动生成的标头。这些哈希间接与标签 1、2、3 相关联。标签通过简单的编译时生成的 id 与类相关联。这样我就GetTag<Class1>()可以获得 Class1 的 int-tag。

我的目标是简化 hash->tag 关联。最好这应该是编译时生成和 O(1) 访问时间。在这种情况下,内存不是问题。我不能使用任何第三方软件。

我尝试了以下方法:

具有特定的实现,例如:

但是这种实现很难使用,因为如果我有一个局部变量uint32 my_hash;,编译器无法确定它在编译时具有什么值,那么编译器就无法解析GetTagByHash()调用的正确实现。

0 投票
13 回答
96832 浏览

c - C中的静态断言

在 C(不是 C++)中实现编译时静态断言的最佳方法是什么,特别强调 GCC?

0 投票
4 回答
9916 浏览

c - 如何在编译时确定数组的长度?

在 GCC 中是否有可以在编译时返回数组长度的宏或内置函数?

例如:

为此:

更新0

我可能只是指出,在 C++ 中这样做是微不足道的。可以构建一个返回内部数字的模板[]。我确信我曾经在 Visual C++ 编译器中找到了一个lengthofanddimof宏/内置函数,但现在找不到了。

0 投票
2 回答
731 浏览

c++ - 如何让 C++ 创建一个表达式,使用编译时检查常量和断言变量?

这是一个示例设置……一个宏或一个模板 CHECKEXPR_RETURNVAL(EXPR,VAL) 在返回 VAL 时检查 EXPR 是否为 TRUE。

这在很多地方都很有用——比如在这个高度简化的例子中:

因此,困难在于: 如果可能,我想进行编译时检查,如果该值不是在编译时确定的常量,则进行运行时检查。

基本上,想法是尽快捕获不良参数;如果您可以在编译时捕获一个错误的参数,这比在运行时发现要好。此外,常量初始化器需要编译时版本。


这是我的两次(失败)尝试使单个版本在多个地方工作(作为常量数组大小,作为枚举初始化器,以及在具有变量的函数中)。不幸的是,它们要么仅适用于编译时(常量初始化程序),要么仅适用于运行时——我想找出一个对两者都适用的版本。

不幸的是,这两个版本都不适用于所有三种情况。是否有适用于所有情况的代码结构?