constexpr是C ++ 11中引入的修饰符,它通知编译器函数或变量的值是已知的,或者可以在编译时计算。因此,它可以在不可能的地方用作常数。
我正在尝试在 constexpr 中连接 string_views。 以下是我的代码的简化版本: #包括 #包括 使用命名空间 std::string_view_li...
我明白为什么这不能编译: int main() { constexpr int i = 0; constexpr const int* ptr = &i; } 本地 var 地址在运行时评估(尽管可以在此解决)
我正在学习C,今天我写了一些代码将罗马数字转换为数字。 在我的程序中,我有一个 const int MAXWORTLEN = 16; int main() 内部,以及我有的布尔数组
C++14 constexpr 对 cppreference 的函数要求
cppreference 指出,直到 C++14,constexpr 函数必须满足以下要求: 函数体必须被删除或默认或仅包含以下内容: 空状态...
在C++中众所周知,初始化引用时,类型必须匹配。所以下面的代码片段会导致错误(全局范围内,下同): 无符号 i; int & p = i; // 错误 但是
关于C++中constexpr编译错误的问题,可能与类型转换有关
在C++中众所周知,初始化引用时,类型必须匹配。所以下面的代码片段会导致错误(全局范围内,下同): 无符号 i; int & p = i; 但有一个
这是一些模板 constexpr 函数。 模板 constexpr void function(); 我想强制程序员使用特定的模板参数实例化函数。 模板无效
使用 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...