if-constexpr相关内容
目前我正在学习C++,决定还是从C++20开始吧。但是,这些代码快把我逼疯了,因为我认为结果没有任何意义。 以下代码将打印句子Valid array.。我上面的意思是,这是不对的。它根本不应该打印句子,因为我在参数中插入的类型与概念不匹配。 使用最新的GCC和C++2A(GNU)参数在VS2022预览版3和an online compiler上进行测试,生成相同的结果。 #inclu
..
受到这个答案的启发,我尝试复制和粘贴(并在main()中添加测试) 这段代码: templatestd::tuplefoo(T a) {如果 constexpr (std::is_same_v)返回{a,0.0};否则 if (std::is_same_v)返回 {0, a};别的返回 {0, 0.0};}int main() {汽车 [x, y] = foo("");std::cout
..
例如: void foo(){如果constexpr(...)整数x = 5;别的双倍x = 10.0;bar(x);//调用具有不同值的bar的不同重载} 这在D lang中很常见,但是我没有找到有关C ++ 17的信息. 当然,可以使用类似的东西 std :: conditional :: type x; ,但仅在基本情况下.甚至不同的初
..
在C ++ 17中, if constexpr 被介绍;但是,似乎没有 switch constexpr (请参见这里).这是为什么?也就是说,如果编译器支持 if constexpr ,那么支持 switch constexpr 也是一件很琐碎的事情(最糟糕的是,如果是if-then-else-if-etc.链或多个if(带有一些标志来控制失败率)? 解决方案 if constexpr
..
如果constexpr 是摆脱C ++程序中预处理器的重要一步。但是,它仅适用于函数-如本例所示: 枚举类OS { Linux, MacOs, MsWindows, 未知 }; #如果已定义(__APPLE__) constexpr OS os = OS :: MacOs; #elif已定义(__MINGW32__) constexpr OS os = OS ::
..
是否有一种方法可以确定是否可以对constexpr求值,并将结果用作constexpr布尔值?我的简化用例如下: template 类派生的 { template void do_stuff(){(...)} void do_stuff(size_t size){(...)} public: void ex
..
为什么此代码在编译时出现错误?我的“ this ) $ c> if constexpr ”表示不应编译 else 块。 if constexpr(true){ int a = 10; } else { int b = 10 } 错误为: 错误:预期','或';'在'}'令牌 使用的编译器: g ++版本7.5.0 编译时我使用的是 -std
..
我正在尝试通过以下方式使用 if constexpr : template class Trait, typename首先,typename其次,typename ... Rest> constexpr bool binaryTraitAre_impl() { 如果constexpr(sizeof ...(Rest
..
我正在尝试使用模板元编程,constexpr和constexpr(如果使用constexpr),并想出了3种不同的方法来进行N递归/N因子运算. 这三个示例都是我在SO上或通过网上搜索找到的一些示例,然后对其进行了修改,因此它们也是如此 第一个示例使用模板元编程:示例1 template struct NGenerator { static const in
..
我有以下代码 static constexpr bool condition = true; int square(int num) { if constexpr (condition) { return num * num; } else { x return num; } } int main() { return
..
#include int foo(int x) { if constexpr (std::is_same_v) { x = std::string(); } } int main(void) { return 0; } 此代码无法在GCC 7或Clang 5上编译: error:
..
最近,我在constexpr函数中将某些if constexpr修改为if,发现它们仍然可以正常工作,并且可以在编译时进行评估.这是一个最小的情况: template constexpr bool is_negative() { if constexpr (N >= 0) return false; else return true; } int main
..
我正在尝试使用if-constexpr进行检查,但是遇到诸如此类的错误 期望'('在'constexpr'之前 'else',而前面没有'if' 到目前为止,我检查我的代码是否有问题 我的编译标志是g ++ -std = c ++ 17 main.cpp #include template
..
struct A{ constexpr operator bool()const{ return true; } }; int main(){ auto f = [](auto v){ if constexpr(v){} }; A a; f(a); } clang 6接受该代码,GCC 8拒绝该代码: $ g++ -std=c++17 main.cpp
..
是否有可能将new运算符重载为constexpr函数?像这样: constexpr void * operator new( std::size_t count ); 之所以要在重载的运算符主体中执行constexpr函数,其中count参数值将是输入数据...运算符是由以下方式调用的: SomeClass * foo = new SomeClass(); 数据类型的大小在编
..
我想使用if constexpr代替标签分派,但是我不确定如何使用它.下面的示例代码. template struct MyTag { static const int Supported = 0; }; template struct MyTag { static const int Supported = 1; };
..
我正在尝试编写一个函数,该函数根据枚举的运行时值将值的枚举映射到一组类型.我意识到您不能基于枚举的运行时值返回不同的类型,因为编译器不知道要分配多少堆栈空间.但是,我正在尝试使用新的if-constexpr功能将其编写为constexpr函数. 我从clang收到错误消息,抱怨我使用的是非法指定的模板参数.有人看到如何实现这一点吗? edit:这是一个更易于理解的版本,更简洁地演示了我
..
我正试图完全理解if constexpr. 我了解,如果在模板中使用if constexpr(expr)且expr依赖于模板参数,那么在实例化期间,将仅实例化then/else分支之一,而另一个将被实例化被丢弃. 我有两个问题: 是真的吗?如果expr不依赖于模板参数,那么if constexpr(expr)的任何分支都不会被丢弃?如果是,那么标准在哪里说呢?我看不出该标准在哪里
..
在模板化的lambda中,"if constexpr"有问题.为了争辩,让我们忽略我如何到达那里,但是我有一个struct foo,它以某种方式定义,结果如下: template struct foo { int a; // Only contains b if condition is true int b; } 现在我可以定义
..
我想使用constexpr bool(在下面的示例中为useF)来启用以下代码中的功能.在这里,调用A::f().另外,在关闭功能的情况下,我希望成为别名模板(a)为void. 我试图使用constexpr if语句,但是主体仍在实例化,这会导致编译错误.如果我使用包装器模板(X),则将按我的预期丢弃该主体,但是对我来说,这似乎很丑陋.还有其他方法吗? constexpr bool u
..