Tag: 编译时间

如何正确地传递编译时信息到模板Haskell函数?

我需要将编译脚本中的一些信息传递给模板Haskell。 目前编译脚本将信息保存在系统环境中,所以我只是使用包裹在runIO System.Environment.getEnvironment读取它。 有没有更好的方法,比如将一些parameter passing给ghc (类似于-D…对于C预处理器),或者可能是在TH中专门为此目的而devise的?

is_constexpr在C ++ 11中可能吗?

是否有可能根据C ++ 11expression式是否是C ++ 11中的常量expression式(即constexpr )来生成编译时布尔值? 关于这个问题的几个问题与此有关,但我没有在任何地方看到明确的答案。

什么时候在编译时才会对constexpr函数进行评估?

由于可能在运行时调用一个声明为constexpr的函数,编译器决定是在编译时还是在运行时计算它? template<typename base_t, typename expo_t> constexpr base_t POW(base_t base, expo_t expo) { return (expo != 0 )? base * POW(base, expo -1) : 1; } int main(int argc, char** argv) { int i = 0; std::cin >> i; std::cout << POW(i, 2) << std::endl; return 0; } 在这种情况下,我在编译时是未知的,这可能是编译器将POW()作为在运行时调用的常规函数​​的原因。 然而,这种dynamic,似乎很方便,有一些不切实际的影响。 例如,在编译期间,是否可能会有编译器计算constexpr函数的情况,编译器决定将其作为一个普通函数来处理,而编译期间它也能工作? 有什么已知的常见陷阱?