constexpr 相关问题

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

通过使用 constexpr 参数调用 constexpr 函数来初始化静态存储变量

我有以下无限递归 constexpr 函数: constexpr int foo(int x) { 返回 foo(x + 1); } 然后我发现 int main() { 静态 int x = foo(5); 静态 int y = std::

回答 1 投票 0

强制编译时 constexpr [重复]

在 C++11 中我们得到 constexpr: constexpr int foo (int x) { 返回x+1; } 是否可以使用动态值 x 来调用 foo 并引发编译时错误?也就是说,我想创建一个 foo...

回答 4 投票 0

回答 4 投票 0

constexpr 与 constexpr 内联与定义 - 优化 C 和 C++ 中的通用实用函数

我有一个简单的函数,在我的操作代码中为 C 编译,在测试中为 C++ 编译。由于我将在代码中广泛使用此函数,因此我想在实用程序文件中声明它并使其...

回答 1 投票 0

为什么 constexpr 函数中的参数不是常量表达式?

您能解释一下为什么这段代码无法编译吗? // 源.cpp constexpr const char* func(const char* s) { return s;} constexpr bool find(const char *param) { constexpr const char* 结果...

回答 1 投票 0

节点句柄中的constexpr

我想要求澄清标准指示的节点句柄类型的具体情况。我读了cppreference信息,其中指定了Node-handle的默认构造...

回答 1 投票 0

错误:constexpr 指针初始值设定项不为空

我有这个非常简单的程序: int 主函数(无效) { 静态 constexpr const char *const str = "你好"; } 无法编译并出现此错误: $ gcc -std=c2x str.c str.c:在函数中...

回答 1 投票 0

根据编译时常量参数运行不同的函数

我有这个函数可以用 N 个字节的重复模式填充缓冲区。 void* memsetPattern(void* buf, size_t bufSize, const void* Pattern, size_t PatternSize) { if (buf == nullptr || 模式...

回答 1 投票 0

避免评估未采用的 if-constexpr 分支

以下代码无法编译,并出现错误 no member named 'foo' in 'B',尽管这只是应在编译时丢弃的上下文中的问题。 #包括 以下代码无法编译并出现错误 no member named 'foo' in 'B',尽管这只是应在编译时丢弃的上下文中的问题。 #include <type_traits> struct A { int foo() { return 1; } }; struct B { int bar() { return 2; } }; static constexpr bool TEST = false; using T = std::conditional_t<TEST, A, B>; int main() { T t{}; if constexpr (TEST) { return t.foo(); } else { return t.bar(); } } 我该怎么做才能启用这样的代码?如果我用预处理器宏替换 constexpr,这可能会工作得很好,不是吗? https://en.cppreference.com/w/cpp/language/if对您的情况有这样的说法: 在模板之外,对废弃的语句进行全面检查 这表明您可以将其粘贴到模板中以使其正常工作: template <typename U=T> int myMain() { U t{}; if constexpr (TEST) { return t.foo(); } else { return t.bar(); } } int main() { return myMain(); }

回答 1 投票 0

类中的静态 constexpr 定义与主函数中的定义

当我尝试在主函数中定义某个变量时,我可以将变量定义为: int 主函数 () { constexpr unsigned int 变量名 = 10; } 但是,当我尝试将变量封装在

回答 1 投票 0

constexpr 数据成员和单一定义规则

我想定义一个特殊的实例,用于分支到优化的代码路径,如下所示: //------------------- 标题 ---------------------- 模板 类东西 { T值...

回答 1 投票 0

consteval 构造的对象的地址是常量表达式吗?

以下代码可以在 GCC 和 MSVC 上编译,但被 Clang 拒绝: 结构X { 常量无效 *p_; 保守 X() :p_{这个} { } }; 静态 constexpr X x{}; (https://godbolt.org/z/ExYMeT...

回答 1 投票 0

具有恰好 N 个参数的结构的构造函数,其中 N 是模板参数

我不想创建一个非常小的数学库,它对 constexpr 有很好的支持。 为了简化问题,我们在这里只讨论向量。 模板 结构 vec...

回答 1 投票 0

如何从 std::set 获取 constexpr 大小,并使用它返回一个 std::array ,其中包含 C++23 中 std::set 中的元素数量?

如何从 std::set 获取 constexpr 大小,我可以用它返回一个 std::array ,其中包含 C++23 或未来 C+ 中 std::set 中的元素数量+26,就 G++ 或 Cl 的支持而言...

回答 1 投票 0

我可以制作一个 std::set 类型的 constexpr 对象吗?

我需要一个 std::set 类型的 const 对象,它将在许多其他 cpp 文件中使用。 由于每个翻译单元的初始化顺序未定义,因此我在初始化时可能会得到一个空集...

回答 2 投票 0

`constexpr`“编译时指针”在 C++ 中如何工作?

背景 指针不能用作模板(在编译时专门化)的 T* p 值参数,因为某些对象 T obj 的内存地址 &obj 仅在运行时才知道。

回答 1 投票 0

在常量表达式中不允许读取非 constexpr 变量“p”

为什么可以通过对象 's' 直接使用方法 'func()' 来初始化 constexpr 变量('x' 或 'y'),但不能通过指针变量 'p'(对于 'z') ')?而且,该物体本身是...

回答 1 投票 0

无法创建多个 constexpr getter

我有一个包装多个 std::sets 数据的结构。我想访问要在编译时计算的集合。为此,我创建了一个模板 constexpr getter 方法来返回请求的 se...

回答 1 投票 0

有模板/constexpr/C++11方法来替换X宏吗?

有没有办法使用 C++11 功能替换 Xmacro 习惯用法,并且最好不使用预处理器?我认为可以使用元组模板,但我仍在尝试了解它们是如何工作的。

回答 2 投票 0

无法创建 constexpr getter

我有一个包装多个 std::sets 数据的结构。我想访问要在编译时计算的集合。为此,我创建了一个模板化 constexpr 方法来返回请求的集。 //

回答 1 投票 0

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