constexpr相关内容
标题说这一切,和通常的方式都不工作。我缺少什么? 1。 class Cl { static constexpr double PI; }; constexpr double Cl :: PI = 3.14; (26):error C2737:'private:static double const Cl :: PI':'constexpr'对象必
..
我想实验将一个项目从gcc迁移到clang ++。我承认无知,我不知道为什么下面的代码 template
..
当我尝试编译以下代码时,我得到一个链接器错误:架构x86_64的未定义符号:“Foo()”,引用自:main.o中的_main using LLVM 4.2。 此行为仅在函数标记为 constexpr 时才会发生。当函数标记为 const 时,程序会正确编译和链接。为什么声明函数 constexpr 导致链接器错误? (我意识到这样写函数doesn' t) main.cpp /
..
很明显,constexpr意味着const,因此它是常见的: constexpr int foo = 42; // no const here 但是如果你写: constexpr char * const str =“foo”; 然后GCC将生成“警告:从字符串常量到字符串常量的转换为'char *'”if -Wwrite -string标志被传
..
在回答此问题时,我尝试了以下代码与gcc(编译代码)和clang( code rejected ): typedef long(* func) long function(int){return 42; } struct Test { static constexpr func f =& function; }; template st
..
我有一个名为access的constexpr函数,我想从数组中访问一个元素: char const * const foo =“foo”; char const * const bar [10] = {“bar”}; constexpr int access(char const * c){return(foo == c); } //这是工作 constexpr int ac
..
以下将使用GCC 5.2进行编译,但不能与Visual Studio 2015一起编译。 template struct CRTP { static constexpr int num = Derived :: value + 1; }; struct A:CRTP { static constexpr int value =
..
在这里击败死马。在C中执行整数幂的一种典型(和快速)方法是经典: int64_t ipow(int64_t base,int exp) { int64_t result = 1; while(exp){ if(exp& 1) result * = base; exp>> = 1; base * = base; } return result; }
..
我试图创建一个constexpr函数,它将连接任意数量的字符数组,通过Xeo的下面的回答,连接两个字符数组。 > http://stackoverflow.com/a/13294458/1128289 #include 模板 struct seq {}; template
..
考虑下面的C ++ 11程序,其结果在GCC 4.7.2中: int main b $ b { constexpr int i = 0; int * p = i; } // g ++ -g -ggdb -Wall -Wextra -pedantic -std = c ++ 11 t.cpp // t.cpp:In function'int main()': // t.
..
我使用gcc 4.6.1,并得到一些有趣的行为涉及调用 constexpr 函数。这个程序运行很好,直接打印输出 12200160415121876738 。 include extern const unsigned long joe; constexpr unsigned long fib(unsigned long int x) { retu
..
我试图找到问题的解决方案 C ++模板非类型参数类型推导,它不涉及调用f的模板参数,但隐含地为模板参数选择正确的类型。 由于 constexpr 应该保证函数只包含编译时常量,并在编译时评估(至少是我认为它是),我认为这可能是这个问题的解决方案。 所以我想出了这个: 模板
..
这可能是一个基本问题,但我现在无法看到自己的回应。 请考虑以下代码: 模板 struct T { static constexpr int value =(b?42:0); }; template struct U { enum {value =(b?42:0)}; }; int main(){ static_ass
..
通常,constexpr必须没有副作用。但是,我刚刚发现可以在抛出异常的构造函数中使用副作用。这种技术可以用于模拟constexpr函数的assert(),如下面的程序所示。 #include< ; iostream> #include #include struct constexpr_precond_violated:st
..
假设您有一个函数为您的应用程序生成一些安全令牌,例如一些哈希盐,或者一个对称或不对称的键。 现在让说你在你的C ++中有这个函数作为一个constexpr,并根据一些信息(例如,内部版本号,时间戳,别的东西)生成你的构建的密钥。 你是一个勤奋的程序员,确保并以适当的方式调用它,以确保它只在编译时被调用,因此死去除器从最终可执行文件中删除代码。 但是,你永远不能确定别人不会以不安全
..
我想在编译时使用类型的名称。例如,假设我写了: constexpr size_t my_strlen(const char * s) { const char * cp = s; while(* cp!='\0'){cp ++; }; return cp - s; } 现在我想要: template constex
..
请考虑以下代码: 模板 {static constexpr int foo = 42; }; int main(){} GCC v6.1 编译它, clang 3.8 拒绝它的错误:
..
我测试用户定义的文字。我想让 _fac 返回数字的阶乘。 让它调用 constexpr 函数工作,但它不让我做模板,因为编译器抱怨的参数不是,不能 constexpr 。 / p> 我很困惑这 - 不是字面量常量表达式?在 5_fac 中的 5 始终是一个可以在编译时评估的文字,所以为什么不能使用 constexpr int factorial_function(int x){
..
为什么不编译: 将 string 作为返回类型会出现问题吗? constexpr std :: string fnc() { return std :: string(“Yaba”); } 解决方案 std :: string 指向 char 的指针不是 constexpr 。在 constexpr 函数中,只能使用 constexpr 的函数。
..
g ++(4.7.2)和类似的版本似乎在编译期间令人惊讶地评价constexpr。在我的机器上,事实上比编译程序在运行时快得多。 这种行为有合理的解释吗? 是否有优化技术,只有 适用于编译时,可以比实际编译代码更快执行? 如果是这样,哪个? 这里是我的测试程序和观察结果。 #include constexpr int mc91(int n)
..