使用c++17 if constexpr可如下实现: // 在ubuntu20.04,g++ 9.4.0使用 g++ -std=c++17 main.cpp编译 #include <iostream> #include <string> #include <cassert> #include <type_traits> template <typename T> void decrement_kindof(T& value) { if constexpr (std::is_same<std::string, T>:...
-- Build files have been written to: /Users/lxz/Develop/constexpr-demo/build # lxz @ lxz-MacBook-Pro in ~/Develop/constexpr-demo/build on git:master o [13:28:58] $ ninja [2/2] Linking CXX executable src/constexpr # lxz @ lxz-MacBook-Pro in ~/Develop/constexpr-demo/build on ...
是的,你的理解是错误的。来自cppreference:在模板之外,完全检查丢弃的语句。if constexpr不能替代#if...
是的,你的理解是错误的。来自cppreference:在模板之外,完全检查丢弃的语句。if constexpr不能替代#if...
因为main()不是模板,所以if constexpr的两边都必须有效。要以这种方式使用if constexpr,它需要在模板...
因为main()不是模板,所以if constexpr的两边都必须有效。要以这种方式使用if constexpr,它需要在模板...
if 语句 - cppreference.comzh.cppreference.com/w/cpp/language/if 以if constexpr开始的语句被...
这个提示表明,编译器当前使用的标准低于 C++17,而if constexpr是C++17 引入的新特性。因此,编译器无法识别if constexpr语法,并提示用户需要使用-std=c++17或-std=gnu++17标准来编译代码。-std=c++17是指定使用 C++17 标准,而-std=gnu++17是指定使用 GNU 编译器(GCC)的 C++17 标准实现。
ifconstexpr(可选)(条件) true分支语句 else false分支语句 } 但初始化语句所声明的名字(若初始化语句是声明)和条件所声明的名字(若条件是声明)处于同一作用域中,同时也是两条语句所在的作用域。 std::map<int,std::string>m;std::mutexmx;externboolshared_flag;// 由 mx 保证intdemo(){if(autoit=m.fin...
很明显,代码的可读性就有些被破坏了。来到C++17后,就可以使用if-constexpr了: template<typenameT>std::stringtoStr(Tt){ifconstexpr(std::is_same_v<T,std::string>)returnt;elsereturnstd::to_string(t);} 代码的可读性与上面使用enable_if相比好了许多!