constexpr相关内容

C ++ 11在constexpr函数中使用统一值初始化数组

我有一个类模板,它根据模板参数作为其成员之一构建一个简单的数组.我需要能够在构造函数之一中将数组中的每个元素初始化为单个值.不幸的是,此构造函数必须为 constexpr . 相关部分归结为: 模板foo类{T data [N];constexpr foo(T val){//使用N个val副本初始化数据}}; 使用 std :: fill 或 ..
发布时间:2021-04-20 18:35:28 C/C++开发

左值ref对象上的Constexpr成员函数:Clang和gcc不同意

当类具有constexpr成员函数并且正在constexpr上下文中的l值对象上对该成员函数进行求值时,clang和gcc会不同意结果是否为constexpr值.为什么?是否有既不需要默认可构造性又不需要复制可构造性的解决方法? 当对象通过值传递时,两个编译器均成功编译. Clang版本的trunk,8、7: static_assert表达式不是整数常量表达式 和 Gcc版 ..
发布时间:2021-04-20 18:35:03 C/C++开发

constexpr隐含noexcept吗?

constexpr 说明符是否暗示函数的 noexcept 说明符?回答到简单检查显示出它的答案.并非如此. constexpr布尔f(int)noexcept{返回true;}constexpr布尔g(int){返回true;}static_assert(noexcept(f(1)));static_assert(noexcept(g(2)));//注释此行以检查运行时行为#include ..
发布时间:2021-04-19 20:51:08 C/C++开发

Clang 3.7.0抱怨类不是文字的,因为它不是聚合的,并且没有constexpr构造函数

以下代码在GCC(4.9.3)和VC ++(19.00.23506)中可以很好地编译,但是在Clang(3.7.0)中会出现这些错误. 错误:constexpr函数的返回类型'Foo'不是文字类型 注意:'Foo'不是文字的,因为它不是集合,并且没有复制或移动构造函数以外的constexpr构造函数 代码: #include#include ..
发布时间:2021-04-19 20:14:30 C/C++开发

创建一个std :: array,其大小在运行时计算

我想创建一个 std :: array 的对象,但是问题是我只能使用返回 constexpr 类型的函数,否则编译器会抱怨.这里的问题是,我需要根据另一个数组的大小来计算该数组的长度,这可能是这样的: 模板struct DataLength{模板size_t maxPossibleLength(开始,结束){size_t m_ ..
发布时间:2021-04-19 19:46:27 C/C++开发

constexpr std :: array的开头

我无法理解为什么gcc-8.2.0和clang-7.0.0都拒绝以下代码(实时代码这里): #includeint main(){constexpr std :: arrayv {1,2,3};constexpr auto b = v.begin();//错误:不是constexpr返回0;} 有错误 错误:'(std :: array : ..
发布时间:2021-04-19 18:49:55 C/C++开发

C ++-Static_assert和constexpr函数在运行时求值的能力

我正在阅读有关C ++中的 constexpr 和 static_assert 功能的信息,似乎让我感到困惑-我您已经读到 constexpr 函数不一定在编译期间就进行评估,它们有时可以在运行时进行评估。让我困扰的一件事是,在编译过程中总是检查 static_assert 。那么,如果我们将 constexpr 传递给 static_assert ,但是编译器选择评估该 constexpr,会发 ..
发布时间:2020-10-08 18:37:51 C/C++开发

具有整数文字的reinterpret_cast不是constexpr

下面的代码既不能在 gcc 中也不能在 clang 中进行编译。都抱怨说, reinterpret_cast 到 int * 不是 constexpr 。 如何解决该问题?请注意,我无法修改在第三方库( avr )中定义的宏 PORT 。 #include #定义端口((int *)(0x20)) constexpr int * p =端口; //不编译 ..
发布时间:2020-10-08 18:37:47 其他开发

constexpr字符串文字检查:语法简短,没有运行时的可能性

编辑:重命名,因为我的最终解决方案不使用中毒方法。 我正在寻找一种防止在运行时调用constexpr方法的方法。我正在编写一个接受字符串文字的函数,所以我不能简单地使用NTTP作为要求 constexpr 参数的方式: template auto func(){...} 因为即使合法的constexpr使用也变得麻烦,要求值具有 ..