问题标签 [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.
c++ - 类型名称的 typeid 是否总是在 C++ 中的编译时评估?
我想检查 typeid 在与类型名称(即 typeid(int)、typeid(std::string)...)一起使用时在编译时进行评估。
为此,我在一个循环中重复了两个 typeid 调用的比较,并在启用优化的情况下对其进行编译,以查看编译器是否简化了循环(通过查看执行时间是 1us 时它简化而不是 160ms 时它不是)。
我得到了奇怪的结果,因为有时编译器简化了代码,有时却没有。我使用 g++(我尝试了不同的 4.x 版本),程序如下:
出现此问题的条件尚不清楚,但是:
-如果不涉及继承,则没有问题(始终在编译时)
-如果我只进行一次比较,则没有问题
-问题仅在比较分离时出现,如果所有的条款都是假的
那么在 typeid 的工作原理上是否有一些我没有得到的东西(当与类型名称一起使用时,它是否总是应该在编译时进行评估?)或者这可能是评估或优化中的 gcc 错误?
关于上下文,我将问题追溯到这个非常简化的示例,但我的目标是将 typeid 与模板类型一起使用(因为无法实现部分函数模板特化)。
谢谢你的帮助!
for-loop - for循环条件的最佳实践
在这种情况下,什么被认为是最佳做法?
或者
假设我不想从某个方向迭代,而是在数组的裸长度上迭代。另外,我不打算改变循环体中数组的大小。
那么,array.length()
编译过程中会变得不变吗?如果没有,那么第二种方法应该是要采用的方法..
c# - 使用指令组织,重新运行测试?
在提交之前,我更喜欢在我的 C# 解决方案中运行所有数百个单元测试,因为它们只需要几分钟即可运行。但是,如果我已经全部运行它们,一切都很好,然后我决定using
在我的解决方案中组织指令,是否真的有必要重新运行单元测试?我有一个宏,它遍历解决方案中的所有文件,并在每个文件上运行 Visual Studio 的“删除和排序”命令。据我了解,只要所有项目在using
指令更改后仍然构建,运行时也应该没问题。这是正确的想法吗?
java - 获取java类的编译时间戳
是否可以可靠地确定本地运行的 java 应用程序以及作为 applet 和/或 JNLP webapps 的给定类的编译时间戳?
java - 在编译时禁用 Java 日志记录
我有一些 Java 代码,我想使用日志消息进行调试以进行调试。但是,最终(编译的)生产代码不应包含任何日志记录,因为它会减慢执行时间。Java中有什么方法可以在编译时禁用记录器吗?
我不害怕在运行时启用/禁用记录器的日志方法中添加的足迹检查。
但我想避免在我的生产代码中进行如下参数构造:
我正在使用 Sun 的 Java 编译器。
c++ - 动态哈希->类标签
我有:
哈希来自自动生成的标头。这些哈希间接与标签 1、2、3 相关联。标签通过简单的编译时生成的 id 与类相关联。这样我就GetTag<Class1>()
可以获得 Class1 的 int-tag。
我的目标是简化 hash->tag 关联。最好这应该是编译时生成和 O(1) 访问时间。在这种情况下,内存不是问题。我不能使用任何第三方软件。
我尝试了以下方法:
具有特定的实现,例如:
但是这种实现很难使用,因为如果我有一个局部变量uint32 my_hash;
,编译器无法确定它在编译时具有什么值,那么编译器就无法解析GetTagByHash()
调用的正确实现。
c - C中的静态断言
在 C(不是 C++)中实现编译时静态断言的最佳方法是什么,特别强调 GCC?
c - 如何在编译时确定数组的长度?
在 GCC 中是否有可以在编译时返回数组长度的宏或内置函数?
例如:
为此:
更新0
我可能只是指出,在 C++ 中这样做是微不足道的。可以构建一个返回内部数字的模板[]
。我确信我曾经在 Visual C++ 编译器中找到了一个lengthof
anddimof
宏/内置函数,但现在找不到了。
c++ - 如何让 C++ 创建一个表达式,使用编译时检查常量和断言变量?
这是一个示例设置……一个宏或一个模板 CHECKEXPR_RETURNVAL(EXPR,VAL) 在返回 VAL 时检查 EXPR 是否为 TRUE。
这在很多地方都很有用——比如在这个高度简化的例子中:
因此,困难在于: 如果可能,我想进行编译时检查,如果该值不是在编译时确定的常量,则进行运行时检查。
基本上,想法是尽快捕获不良参数;如果您可以在编译时捕获一个错误的参数,这比在运行时发现要好。此外,常量初始化器需要编译时版本。
这是我的两次(失败)尝试使单个版本在多个地方工作(作为常量数组大小,作为枚举初始化器,以及在具有变量的函数中)。不幸的是,它们要么仅适用于编译时(常量初始化程序),要么仅适用于运行时——我想找出一个对两者都适用的版本。
不幸的是,这两个版本都不适用于所有三种情况。是否有适用于所有情况的代码结构?