constexpr相关内容
我似乎不明白为什么编译以下类型为const int的代码: int main() { 使用T =整数; const T x = 1; auto lam = [](T p){return x + p; }; } $ clang ++ -c lambda1.cpp -std = c ++ 11 $ 而此类型为const double的类型则不会:
..
我有以下示例代码 template 类运算 { public: constexpr运算(const T1& lhs,const T2& rhs)noexcept :m_lhs(lhs),m_rhs(rhs){ } 私人: const T1& m_lhs; const T2& m_rhs; }; int main() { constex
..
我有一个模板基类,希望子类将自身作为模板参数传递。 它看起来像这样: template struct Base { constexpr Base(int x):m_x(x){} private: int m_x; }; 结构派生:public Base { static const Derived LIFE;
..
constexpr 是编译器的指示符,还是强制行为? 下面的示例如下: template。只有在期望返回编译时间常数的情况
..
考虑以下代码: 静态constexpr int make_const(const int){ return i; } void t1(const int) { constexpr int ii = make_const(i); //这里发生错误(我不是常数表达式) std :: cout
..
==>参见 coliru 上的完整代码段和编译。 > 我有一个 LiteralType 类满足 constexpr 的要求: struct MyString { constexpr MyString(char const * p,int s):ptr(p ),sz(s){} constexpr char const * data()const {return ptr; }
..
对于定义如下整数类型(在函数和类范围)的编译时常量,哪种语法最好? static const int kMagic = 64; //(1) constexpr int kMagic = 64; //(2) (1)对于C ++ 98/03编译器也适用,相反,(2)至少需要C ++ 11。两者之间还有其他区别吗? 编辑 我使用 Godbo
..
据我所知,一种非常常见的情况是 template class Class { public: static constexpr int I = i; 静态constexpr int J = constexprFunction(i); //进一步的类实现 }; 我通常会看到这个错误(实际上,我的大部分问题是因为我忘记了,不知道,正确的问题是什么
..
当在C ++ 11中引入constexpr时,我感到很兴奋,但是不幸的是,我对它的有用性做出了乐观的假设。我假设我们可以在任何地方使用constexpr来捕获文字编译时常量或文字编译时常量的任何constexpr结果,包括以下内容: constexpr float MyMin(constexpr float a,constexpr float b){return a
..
如果我想对元组进行迭代,则必须使用疯狂的模板元编程和模板助手专业化。例如,以下程序将不起作用: #include #include #include constexpr auto multiple_return_values() { return std :: make_tuple(3,3.14,“ pi”);
..
是否可以声明变量 extern constexpr 并将其定义在另一个文件中? 我尝试过但是编译器给出错误: constexpr 变量' i '不是定义 在.h中: extern constexpr int i; in .cpp: constexpr int i = 10; 解决方案 不行,这就是标准说(第7.1.5节):
..
如果我在函数内有一个变量(例如,一个大数组),则将其声明为 static 和 constexpr ? constexpr 保证在编译时创建数组,所以 static 会没有用吗? void f(){ 静态constexpr int x [] = { //几千个元素 } ; //使用数组 } 是 static 实际上在生成的代码或语义方面在做什么? 解决方案 答
..
P0292R1 constexpr(如果已已包含,对于C ++ 17而言,该计划已步入正轨。似乎有用(并且可以替代SFINAE的用法),但是有关错误分支中的 static_assert 格式错误,无需诊断的注释我: 如果不建议在 constexpr的未使用分支中撤消static_assert声明。 void f(){ 如果constexpr(false) static_asser
..
是否可以使用 constexpr 连接两个字符串文字?或者换句话说,可以消除代码中的宏吗? #define nl(str)str“ \n” int main() { std :: cout
..
你好,我正在学习C ++ 11,我想知道如何使constexpr 0到n数组,例如: n = 5; int array [] = {0 ... n}; 所以数组可能是 {0,1,2,3,4, 5} 解决方案 在C ++ 14中,使用 constexpr 构造函数和一个循环: #include template
..
我想使用构造函数定义派生类型(SBar)的constexpr值,该构造函数的唯一参数是基类(SFoo)的变量,该变量仅用于初始化基数。 当基类没有数组成员时,这可以正常工作。但是,当我添加一个数组时,派生值将不再是constexpr。但是,基类的简单副本确实会产生constexpr结果。 我已经明确默认所有副本和移动构造函数都是为了安全起见。 test.cpp #defi
..
我正在尝试编写constexpr查找函数,该函数将返回包含特定值的std :: array的索引。下面的函数似乎可以正常工作,除非包含的类型为 const char * : #include constexpr auto name1(){ 返回“ name1”; } constexpr auto name2(){ 返回“ name2”; } 模板
..
我们只是被错字弄糊涂了:" constexpr bool maxDistance = 10000; " gcc和clang都在没有警告的情况下进行了编译. 这里真正的错误是该变量不应该是bool类型,而应该是一个整数类型. 我们如何确保将来收到编译器警告? #include constexpr bool number = 1234; int main
..
请考虑以下代码段: int main(){ constexpr int x = -1; if(x >= 0){ constexpr int y = 1
..
背景 很长一段时间以来, gcc一直在提供内置位纠缠功能,尤其是尾随和前导0位的数量(也适用于long unsigned和long long unsigned,其后缀为l和ll): —内置功能:int __builtin_clz (unsigned int x) 返回 x中前导0位的数量,从最高有效位开始 位置.如果x为0,则结果不确定. —内置功能:int __built
..