constexpr是C ++ 11中引入的修饰符,它通知编译器函数或变量的值是已知的,或者可以在编译时计算。因此,它可以在不可能的地方用作常数。
C++ 20 中的“constexpr”和 std::to_string
我有以下声明 - constexpr unsigned intcompileYear = (__DATE__[7] - '0') * 1000 + (__DATE__[8] - '0') * 100 + (__DATE__[9] - '0') * 10 + (__DATE__[10] - '0'); 使用 Visual Studi...
通过使用 constexpr 参数调用 constexpr 函数来初始化静态存储变量
我有以下无限递归 constexpr 函数: constexpr int foo(int x) { 返回 foo(x + 1); } 然后我发现 int main() { 静态 int x = foo(5); 静态 int y = std::
在 C++11 中我们得到 constexpr: constexpr int foo (int x) { 返回x+1; } 是否可以使用动态值 x 来调用 foo 并引发编译时错误?也就是说,我想创建一个 foo...
constexpr 与 constexpr 内联与定义 - 优化 C 和 C++ 中的通用实用函数
我有一个简单的函数,在我的操作代码中为 C 编译,在测试中为 C++ 编译。由于我将在代码中广泛使用此函数,因此我想在实用程序文件中声明它并使其...
您能解释一下为什么这段代码无法编译吗? // 源.cpp constexpr const char* func(const char* s) { return s;} constexpr bool find(const char *param) { constexpr const char* 结果...
我想要求澄清标准指示的节点句柄类型的具体情况。我读了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 习惯用法,并且最好不使用预处理器?我认为可以使用元组模板,但我仍在尝试了解它们是如何工作的。