constexpr相关内容
我有一个函数,该函数采用多维 std :: vector ,并且需要将深度(或维数)作为模板参数传递。而不是硬编码此值,我想编写一个 constexpr 函数,该函数将使用 std :: vector 并返回深度作为无符号整数值。 例如: std :: vector> v = { {{0,1},{2,3}}
..
在我的项目中,我有很多枚举,这些枚举需要具有与枚举成员关联的其他属性以及与枚举类型关联的辅助静态方法。 据我所知,标准枚举类MyItem {...}不可能实现,因此对于我项目中的每个枚举类,我都有一个辅助类MyItemEnum,该类封装了这些辅助静态方法并实例化了自身的辅助实例,这样我就可以访问它们的方法以获得其他属性。 下面是一个示例(尽可能简化,但我相信所有要讨论的功能都保留在那里
..
目前,我们有两个主要的编译时评估选项:模板元编程(通常使用模板结构和/或变量)和 constexpr 操作 1 。 template struct sum_ {枚举{value = l + r}; }; //使用struct。 template const int sum = sum_ :: value; //使用st
..
这是我的工作代码示例: #include template 类别b { public: int y; constexpr b(int x):y(x){ } constexpr void sayhi(){ std :: cout
..
在cplusplus.com上,是默认的C ++ 11原型对于 std :: max()是: template constexpr const T& max(const T
..
在阅读关于constexpr的幻灯片时,引言是关于“使用const进行动态初始化” 。例子是 struct S { static const int c; }; const int d = 10 * S :: c; const int S :: c = 5; A,音轨丢失了,音符也丢失了,所以我只能猜测是什么意思 是否正确地动态初始化了 d ,因
..
我真的对 constexpr 概念感到困惑,因为我读过 constexpr 是在编译时评估的,所以与常规 const 相比,它对性能优化很有用。 constexpr int i = 0; constexpr int& ri = i; 上面的代码从类型的表达式返回错误“类型为'int&'的引用的无效初始化” 'const int'“,为什么? 此外,下一个代码
..
为什么在编译时不对constexpr函数进行求值,而在运行时在主函数的return语句中求值? 它尝试了 template constexpr int fac(){ return fac()* x; } template constexpr int fac(){ 返回1; } int main(){ const
..
是否有一种方法可以确定是否可以对constexpr求值,并将结果用作constexpr布尔值?我的简化用例如下: template 类派生的 { template void do_stuff(){(...)} void do_stuff(size_t size){(...)} public: void ex
..
为 constexpr std :: string 和 constexpr std :: vector 已被C ++ 20接受,如何使用它们?链接的文件在细节上很短。我们是否需要指定特殊的 constexpr 分配器,使编译时字符串/向量与它们的常规等效项不兼容? 解决方案 这两篇论文在很大程度上取决于 P0784 ,其中讨论了如何在编译时分配-时间会起作用。 不完整的答案:
..
我有一个基本类,其中包含两个枚举器,一个枚举用于输入,一个枚举用于输出。它具有两个都是静态的成员函数。第一个函数只是一个静态函数,它根据输入返回一个值。它将调用第二个函数,这是一个constexpr函数模板,它将返回constexpr值。 class Foo { public: 枚举输入{ INPUT_0 = 0, INPUT_1, INPUT_2 }; 枚举输出{ OU
..
以下代码生成对“ Test :: color” 的未定义引用。 #include 结构颜色{ int r,g,b; }; void printColor(Color color){ //打印颜色 } class Test { static constexpr Color color = {242 ,34,4}; public: vo
..
我想编写一个在编译时求值的函数,它需要一个指向4字节数组的指针,并输出一个与该数组具有相同位模式的int。 所以我想出了: constexpr int f(const char * p){ return * reinterpret_cast(p); } 然后,我想使用 f()像这样: switch(x){ case f(“ GOOG”): /
..
假设我有一个由引擎参数化的 struct 模板 S : template结构S; 我有两个引擎:一个带有 constexpr的“静态”引擎成员函数 size(),以及一个带有非 constexpr 成员函数的“动态”变量 size(): struct Static_engine { static constexpr std ::
..
不应 std :: invoke constexpr ,尤其是在C ++ 17中 constexpr lambdas ? 是否有任何障碍可以阻止这种情况? 解决方案 更新: P1065 将其设置为 constexpr 。 出于历史原因保留原始帖子: 来自提案: 尽管有可能将符合标准的调用函数模板实现为constexpr函数,建议的措辞不需要这种实现。主要原因是使它与
..
为什么此代码在编译时出现错误?我的“ this ) $ c> if constexpr ”表示不应编译 else 块。 if constexpr(true){ int a = 10; } else { int b = 10 } 错误为: 错误:预期','或';'在'}'令牌 使用的编译器: g ++版本7.5.0 编译时我使用的是 -std
..
我已经实现了 constexpr 编译时的哈希函数,如果调用为 $ b $,则可以很好地工作(即在编译时进行评估)。 b constexpr自动哈希= CompileTimeHash(“ aha”); 但是我需要在实际代码中使用它作为函数的自变量,如 foo(CompileTimeHash(“ aha”)); // foo不是constexpr
..
此代码编译: struct Info { constexpr Info(bool val):已计算(false),value(unsigned(val)){} constexpr Info(unsigned val):counted(true),value(val){} 布尔计数; 无符号值; }; constexpr const auto data = std
..
是否可以推断出c ++ 17函数的模板值(非类型)? 函数foo: template int foo() { return(I); } 可以通过以下方式调用: foo(); 并返回5。 模板类型可以通过函数参数的类型来推导。是否可以以某种方式对模板值执行相同操作?例如: templat
..
请考虑以下代码段,以测试即将到来的C ++ 17功能分解声明(以前称为结构化绑定) #包括 #include constexpr auto divmod(int n,int d) { return std :: make_pair(n / d,n%d); //在g ++ 7中,也只是std :: pair {n / d,n%d} }
..