首页 > TAG信息列表 > if-constexpr
c-如果条件导致错误,则在constexpr中比较constexpr函数参数
我正在尝试比较constexpr-if语句中的函数参数. 这是一个简单的示例: constexpr bool test_int(const int i) { if constexpr(i == 5) { return true; } else { return false; } } 但是,当我使用带有以下标志的GCC 7进行编译时: g -7 -std = c 1z test.cpp -o test我收到以下错误c – “constexpr if”vs“if”优化 – 为什么需要“constexpr”?
C 1z将引入“constexpr if” – 如果将根据条件删除其中一个分支.似乎合理有用. 但是,没有constexpr关键字是不可能的?我认为在编译期间,编译器应该知道编译时间是否已知.如果是,即使是最基本的优化级别也应该删除不必要的分支. 例如(参见godbolt:https://godbolt.org/g/IpY5y5): intc – 仍然评估丢弃分支中的嵌套constexpr-if语句?
在我看来,在MSVC(版本15.7.3)中评估了另一个constexpr-if语句的废弃分支内的constexpr-if语句. 请考虑以下代码: #include <tuple> #include <type_traits> template <size_t I> int test() { if constexpr(I != 0) { return 0; } else { // This branch is dc – 使用constexpr验证构造函数中的文字参数
我开始尝试constexpr. 我想要实现的是验证文字数值作为ctor参数提供.我开始使用以下内容,如果构建MyStruct则抛出值<= 4. constexpr int validate(int v) { return (v > 4) ? v : throw exception(); }; struct MyStruct final { constexpr MyStruct(const int v) : _v{c – constexpr静态成员什么时候停止成为constexpr?
我有这个片段. #include <iostream> #include <string> struct JustStr { JustStr(const std::string& x) : val(x) {} static constexpr bool pred = false; std::string val; }; template <typename T> class C { private: T x; publi