constexpr 相关问题

constexpr是C ++ 11中引入的修饰符,它通知编译器函数或变量的值是已知的,或者可以在编译时计算。因此,它可以在不可能的地方用作常数。

C++14 我应该多久使用一次 constexpr?

我一直在读一本关于C++14/11的书。我刚刚读完关于 constexpr 关键字的一章。我知道它的用途,但我应该多久使用一次 constexpr?我应该在代码中使用它吗...

回答 2 投票 0

只要进程处于活动状态,const char* 文字字符串就会持久存在吗?

我有如下功能: const char* get_message() { return "这是一条恒定的消息,不会永远改变!"; }; const char* get_message2() { 返回“消息...

回答 4 投票 0

只要进程处于活动状态,指向字符串文字的 const char* 是否就持久存在?

我有如下功能: const char* get_message() { return "这是一条恒定的消息,不会永远改变!"; }; const char* get_message2() { 返回“消息...

回答 2 投票 0

只要进程处于活动状态,const char* 字符串就会持久存在吗?

我有如下功能: const char* get_message() { return "这是一条恒定的消息,不会永远改变!"; }; const char* get_message2() { 返回...

回答 2 投票 0

有状态但“constexpr”的 lambda 不能用作非类型模板参数吗?

不知何故,我仍然认为 lambda 是常规函数对象的“语法糖”,因此令我惊讶的是,在 C++-20 下,无法使用有状态但在其他方面为 constexpr 的 lambda 实例...

回答 1 投票 0

有没有办法在 Eclipse CDT 中语法高亮 constexpr 变量?

当我创建一个枚举时,它的成员在我的代码中以蓝色和斜体显示。我想要类似的 constexpr 变量(C++ 14 或更高版本)。这可能吗?

回答 1 投票 0

constexpr 成员函数给出 C2131

我已经理解了 const 和 constexpr 及其应用程序之间的区别,但我无法得到以下错误: // .hpp 文件 类我的类{ 民众: constexpr 双平方(双

回答 1 投票 0

C++ if constexpr 使用 constexpr bool 相当于普通 if?

考虑到正在检查的条件变量已标记为 constexpr,以下代码片段在功能上是否等效? 另外,这是 if constexpr 的正确用法还是它在...

回答 1 投票 0

您可以在 C++20 constexpr 构造函数中隐式激活 union 的数组成员吗?

我正在使用 C++20,并且有一个包含透明联合的结构,其中包含数组。我需要我的结构有一个 constexpr 构造函数,但我想避免填充整个 arr...

回答 1 投票 0

在同一类中使用 constexpr 作为模板参数时出错[重复]

如果我尝试编译以下 C++0x 代码,则会收到错误: 模板 struct foo { }; 结构栏{ 静态 constexpr int number() { return 256; } 无效函数(foo 如果我尝试编译以下 C++0x 代码,则会收到错误: template<int n> struct foo { }; struct bar { static constexpr int number() { return 256; } void function(foo<number()> &); }; 使用gcc 4.6.1,错误消息是: test.cc:6:27: error: ‘static constexpr int bar::number()’ used before its definition test.cc:6:28: note: in template argument for type ‘int’ 使用 clang 2.8,错误消息是: test.cc:6:20: error: non-type template argument of type 'int' is not an integral constant expression void function(foo<number()> &); ^~~~~~~~ 1 error generated. 如果我将 constexpr 函数移至基类,它可以在 gcc 上运行,并在 clang 上给出相同的错误消息: template<int n> struct foo { }; struct base { static constexpr int number() { return 256; } }; struct bar : base { void function(foo<number()> &); }; 代码是否错误,或者是 gcc 4.6 对 C++0x 实现的限制或错误?如果代码是错误的,为什么是错误的,C++11标准的哪些条款说它是错误的? 在 C++ 中,类的成员函数的内联定义仅在解析类中的每个声明后才会解析。因此,在第一个示例中,编译器在声明 number() 时看不到 function() 的定义。 (没有发布的 clang 版本支持评估 constexpr 函数,因此您的任何测试用例都无法在那里工作。) 这将编译成功: struct Sub{constexpr Sub(int i){}}; struct Test{ static constexpr Sub s=0; };

回答 2 投票 0

constexpr 组合评估失败

我尝试使用 constexpr 并尝试将 ipv4 地址解析为四位数字,但它不起作用。所以我将代码精简到失败的地方: #包括 #包括 我尝试使用 constexpr 并尝试将 ipv4 地址解析为四位数字,但它不起作用。所以我将代码精简到失败的程度: #include <cstdint> #include <stdexcept> #include <string_view> #define WORKS 1 static constexpr uint8_t getIpVal(const std::string_view &sv) noexcept { size_t pos = 0; auto len = sv.size(); unsigned long val = 0; while (sv[pos] >= '0' && sv[pos] <= '9' && pos < len) { int digit = sv[pos] - '0'; val *= 10; val += digit; if (val > UINT8_MAX) { return 0; // throw std::invalid_argument(sv.data()); } ++pos; } if (pos < len) { return 0; // throw std::invalid_argument(sv.data()); } return val; } static constexpr auto operator""_ipv4(const char *ipv4Ptr, const size_t size) { const std::string_view ipv4Str(ipv4Ptr, size); const auto pos1 = ipv4Str.find('.'); if (pos1 == std::string_view::npos) { throw std::invalid_argument(ipv4Ptr); } const auto str1 = ipv4Str.substr(0, pos1); #if WORKS return str1; #else return getIpVal(str1); #endif } auto test1() { return "127.0.0.1"_ipv4; } auto test2() { return getIpVal("127"); } 我正在尝试使用编译器资源管理器来编译它:https://godbolt.org/z/aY3ETo6ba 只要将 WORKS 定义为 1,一切似乎都工作正常: .LC0: .string "127.0.0.1" test1(): mov eax, 3 mov edx, OFFSET FLAT:.LC0 ret test2(): mov eax, 127 ret 但是如果我将其设置为零,编译器将创建一个完整的代码,其中包含一个循环来计算该数字。我不懂为什么。 单个功能似乎有效,但组合起来却失败了。在我看来,它应该只创建两个带有数字的函数: test1(): mov eax, 127 ret test2(): mov eax, 127 ret 您的缓冲区溢出了。您在调用string_view::operator[]后检查索引是否太大: while (sv[pos] >= '0' && sv[pos] <= '9' && pos < len) // Fixed: while (pos < len && sv[pos] >= '0' && sv[pos] <= '9')

回答 1 投票 0

constexpr指针如何存在并且constevel函数在编译时返回指针?

我正在浏览 constexpr 和 consteval 的主题,发现以下内容, 我们可以拥有 CONSTEXPR 类型的指针 CONSTEVAL 函数可以返回 CONSTEXPR 变量的指针 一个...

回答 1 投票 0

constexpt指针如何存在并且constevel函数在编译时返回指针?

我正在浏览 constexpr 和 consteval 的主题,发现以下内容, 我们可以拥有 CONSTEXPR 类型的指针 CONSTEVAL 函数可以返回 CONSTEXPR 变量的指针 一个...

回答 1 投票 0

使用局部变量的引用来初始化 constexpr 变量是否有效?

以下代码只能在 GCC 上编译(在 godbolt.org 上检查了 10.4 和 13.2),但不能在 Clang 上编译(在我尝试过的所有版本上都失败,例如 godbolt.org 上的 17.1): 结构体A { 静态常量表达式...

回答 1 投票 0

初始化结构体中的静态 constexpr 变量和类

这是我的工作代码示例: #包括 模板 B类{ 民众: 整数y; constexpr b(int x) : y(x) { } constexpr void sayhi() { 标准::

回答 2 投票 0

在 C++14 中初始化 std::array 类型的静态 constexpr 成员

我无法以编程方式初始化静态 constexpr std::array 成员。 这是我的问题的一个最小示例(因为简化尺寸已知并且很小,因此初始化可以是手动的......

回答 1 投票 0

c++ 将 std::source_location::function_name() 作为字符串文字模板参数传递

我有这段代码,它返回编译时由 __PRETTY_FUNCTION__ 宏提供的修改后的函数名称字符串: 模板 结构体SL { 字符值[N]; constexpr SL(const ch...

回答 1 投票 0

consteval:调用 consteval 函数 'encrypt_string' 不是常量表达式,指向临时子对象的指针不是常量表达式

我想使用 consteval 关键字在 C++ 中创建一个简单的字符串加密。以前,我使用 constexpr,它可以工作,但某些字符串在运行时被加密。所以,我决定改用

回答 1 投票 0

如何使用C++模块:带模板的私有片段?

我正在尝试 C++20,以更好地了解它们在实践中的工作原理。我了解了模块:私有片段,可用于将接口与实现分开,而 k...

回答 2 投票 0

C++11:用另一个 constexpr char 数组初始化 constexpr char 数组

我想用另一个 constexpr char [] 成员初始化 constexpr char[] 成员。可以用C++11或以上版本实现吗? #包括 结构基{ static constexpr char Va...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.