constexpr是C ++ 11中引入的修饰符,它通知编译器函数或变量的值是已知的,或者可以在编译时计算。因此,它可以在不可能的地方用作常数。
使用 std::construct_at 进行复制来更改联合中的活动成员
可以使用 std::construct_at 复制前一个活动成员的值来更改联合中的活动成员吗? 这个最小的例子 #包括 constexpr int f() { 并集 U {
在 C++11 中,std::sqrt 定义为 constexpr,即它可以合法地从其他 constexpr 函数或在编译时上下文(如数组大小或模板参数)中使用吗? g++ 似乎允许它(usi...
我有以下代码片段: #包括 // 另一个接受 const char 数组引用的函数 模板 常量表达式 int anotherFunction(const char (&...
考虑下面的代码: 静态 constexpr QString FOO = QStringLiteral("foo"); // 编译错误,因为 QString 没有默认的析构函数。 我如何在编译时创建 QString!?是吗
带有“long double”的 constexpr 在 ppc64el 上失败
无论出于何种原因,powerpc64le 上的 gcc (g++ (Debian 14.2.0-7) 14.2.0) 无法计算具有长双除法的 constexpr: 无效测试(){ constexpr auto oneThird = ((long double) 1)/ ((long
如何实现 constexpr string_view 与数字的乘法
我想实现 string_view 乘以一个像 python ("{}"*8) 这样的数字,以便在 fmt::format 上更简单地表达格式字符串中有多少个“{}”。 但是下面的代码: ...
我正在创建一个坐标查找表,例如: int a[n][2] = {{0,1},{2,3}, ... } 对于给定的 n,在编译时创建。我开始研究 constexpr,但似乎......
我的程序移植到 Visual Studio 后显示一些奇怪的结果。简化后,我得到了这个最小的可重现示例: consteval 自动运算符 +( 自动 x, 自动&& y ) { 返回 x...
我希望类 C 具有类型 C 的静态 constexpr 成员。这在 C++11 中可能吗? 尝试1: 结构体 Foo { constexpr Foo() {} 静态 constexpr Foo f = Foo(); }; constexpr Foo ...
如何在 constexpr 上下文中使用 std::array 的数据和其他成员函数?
我定义了以下类,期望能够在 constexpr 上下文中使用 std::array,但调用 data 函数会导致编译错误。 #包括 #包括 我定义了以下类,希望能够在 std::array 上下文中使用 constexpr,但调用数据函数会导致编译错误。 #include <array> #include <cstddef> template <std::size_t N> struct ConstexprString { consteval ConstexprString(const char(&_str)[N]) : char_array(std::to_array(_str)) { } consteval auto Data() const -> const char* { return char_array.data(); } private: const std::array<char, N> char_array; }; int main() { constexpr ConstexprString csexpr_str("123\\0"); constexpr auto d = csexpr_str.Data(); } 在 MSVC 上报告编译错误 constexpr auto d = csexpr_str.Data(); // error C2131: expression did not evaluate to a constant 如果您希望字符串是正确的 C 风格字符串,则传递到 ConstexprString 的字符串大小必须包含 null 终止符。尝试像下面这样编辑您的代码。 #include <array> #include <utility> // for std::to_array template <size_t N> struct ConstexprString { consteval ConstexprString(const char (&_str)[N]) : char_array(std::to_array(_str)) { } consteval auto Data() const -> const char* { return char_array.data(); } private: const std::array<char, N> char_array; }; // Test code constexpr ConstexprString<5> csexpr_str("123"); // Correct size: 3 characters + null terminator constexpr auto d = csexpr_str.Data(); // This should now compile correctly
包含 std::string 编译器错误的向量的 Constexpr
我对下面的代码感到非常困惑。请注意,此代码确实可以在 Visual Studio 2022 C++ 20 (/std:c++20) 版本 (17.10.6) 上编译。 这个问题不是重复的:为什么我可以定义...
C++17 constexpr 函数将数组转换为不同大小的数组
我问是否可以转换如下函数: 字符串转义(const string& s) { 字符串 r = ""; for(char c:s) { 如果(c=='"') { ...
使用 Base64 字符串文字编译 uint8_t 数组的初始化
我有一个源文件,其中有一个表示图像的大字节数组。 下面是一个例子(实际上它可以是任何随机数据): const uint8_t image_test_image[] ={ 0x00、0x01、0x02、0x03、0x04、0x...
为什么 std::array 的运算符 ==() 没有标记为 constexpr?
在编译时想要比较 std::array 是很自然的;并且它的运算符 ==() 显然是 constexpr'able 的。然而 - 它没有被标记为 constexpr。这是有意为之还是疏忽?还有-什么...
对 constexpr 数组的每个元素进行 C++ constexpr 操作
是否可以迭代 constexpr C 数组/std::array/向量并对每个元素执行 constexpr 操作以及编译时要完成的所有操作? https://godbolt.org/z/5a4v3Eerh #
循环 2 个 constexpr 数组对来实例化并运行模板函数
项目的C++版本是20。 假设我们有一些服务类模板: 模板 类 SomeAbstractFileService { 民众: 无效初始化(){ std::cout << ...
在下面如果我使用 constexpr 编译器显然编译器说“表达式必须有一个常量值”,这发生在 MSVC 和 GCC 上: int main() { constexpr auto nnn = ...
如何以 constexpr 方式将整数转换为 CUDA 的 __half FP16 类型?
我是空中客车的开发人员,我面临着半精度算术的困难。 在库中的某个时刻,我需要在 constexpr 中将 IntType 转换为相关的 FloatType(相同的位数)
我是空中客车的开发人员,我面临着半精度算术的困难。 在库中的某个时刻,我需要在 constexpr 中将 IntType 转换为相关的 FloatType(相同的位数)
C++23 中的不同翻译单元中是否允许多个相同的非内联 constexpr 变量定义?
C++23 规定 constexpr 函数和静态数据成员是隐式内联的,但对于命名空间范围的 constexpr 变量却没有这样规定。 它还说:“对于任何可定义的......