constexpr是C ++ 11中引入的修饰符,它通知编译器函数或变量的值是已知的,或者可以在编译时计算。因此,它可以在不可能的地方用作常数。
我想要求澄清标准指示的节点句柄类型的具体情况。我读了cppreference信息,其中指定了Node-handle的默认构造...
我有这个非常简单的程序: int 主函数(无效) { 静态 constexpr const char *const str = "你好"; } 无法编译并出现此错误: $ gcc -std=c2x str.c str.c:在函数中...
我有这个函数可以用 N 个字节的重复模式填充缓冲区。 void* memsetPattern(void* buf, size_t bufSize, const void* Pattern, size_t PatternSize) { if (buf == nullptr || 模式...
以下代码无法编译,并出现错误 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(); }
当我尝试在主函数中定义某个变量时,我可以将变量定义为: int 主函数 () { constexpr unsigned int 变量名 = 10; } 但是,当我尝试将变量封装在
我想定义一个特殊的实例,用于分支到优化的代码路径,如下所示: //------------------- 标题 ---------------------- 模板 类东西 { T值...
以下代码可以在 GCC 和 MSVC 上编译,但被 Clang 拒绝: 结构X { 常量无效 *p_; 保守 X() :p_{这个} { } }; 静态 constexpr X x{}; (https://godbolt.org/z/ExYMeT...
我不想创建一个非常小的数学库,它对 constexpr 有很好的支持。 为了简化问题,我们在这里只讨论向量。 模板 结构 vec...
如何从 std::set 获取 constexpr 大小,并使用它返回一个 std::array ,其中包含 C++23 中 std::set 中的元素数量?
如何从 std::set 获取 constexpr 大小,我可以用它返回一个 std::array ,其中包含 C++23 或未来 C+ 中 std::set 中的元素数量+26,就 G++ 或 Cl 的支持而言...
我可以制作一个 std::set 类型的 constexpr 对象吗?
我需要一个 std::set 类型的 const 对象,它将在许多其他 cpp 文件中使用。 由于每个翻译单元的初始化顺序未定义,因此我在初始化时可能会得到一个空集...
`constexpr`“编译时指针”在 C++ 中如何工作?
背景 指针不能用作模板(在编译时专门化)的 T* p 值参数,因为某些对象 T obj 的内存地址 &obj 仅在运行时才知道。
为什么可以通过对象 's' 直接使用方法 'func()' 来初始化 constexpr 变量('x' 或 'y'),但不能通过指针变量 'p'(对于 'z') ')?而且,该物体本身是...
我有一个包装多个 std::sets 数据的结构。我想访问要在编译时计算的集合。为此,我创建了一个模板 constexpr getter 方法来返回请求的 se...
有没有办法使用 C++11 功能替换 Xmacro 习惯用法,并且最好不使用预处理器?我认为可以使用元组模板,但我仍在尝试了解它们是如何工作的。
我有一个包装多个 std::sets 数据的结构。我想访问要在编译时计算的集合。为此,我创建了一个模板化 constexpr 方法来返回请求的集。 //
这是有效的代码: 结构体S{ constexpr S(int x, int y): xVal(x), yVal(y) {} constexpr S(int x): xVal(x) {} 常量表达式 S() {} 常量 int xVal { 0 }; 常量 int yVal { 0 }; }; 但在这里我会
模板类类型的静态数据成员:constexpr 与 const constinit
我有一堂课: #包括 模板 需要 std::is_arithmetic_v && (N >= 1) 向量类 { 静态 constexpr std::size_t Dime...
是否允许将 std::bit_cast 应用于空类的对象,将其转换为相同大小的非空类?尤其是它是否可以在常量表达式中执行? 我很惊讶...
如何使用 std::generate 用值初始化 constexpr 数组
例如,如果我想要一个 constexpr std::array 在编译时用 1-300 的所有 3 的倍数初始化,我该怎么做? 我的第一个想法是使用 std::generate,有些......
C23 的 constexpr 中可以发生哪些新类型和操作?
C23 添加了关键字 constexpr,可用于将对象定义为编译时常量,而不是枚举或宏。例如: constexpr int x = 10; constexpr int y = x+10; // 有效的 是...