此代码无法编译。我假设这是因为string_view不是LiteralType,它违反了constexpr函数条件(http://en.cppreference.com/w/cpp/language/constexpr):
constexpr std::size_t find_space(std::string_view sv) noexcept {
return sv.find(' ');
}
int main() {
const std::string_view sv("Finding first space");
return find_space(sv);
}
然而......如果我用模板值替换它编译好。为什么编译器允许这样做?
template <typename STRING_VIEW>
constexpr std::size_t find_space(STRING_VIEW sv) noexcept {
return sv.find(' ');
}
好像编译器忽略了constexpr,或者STRING_VIEWs特征以某种方式合法地允许它通过。
将GCC 7.1与-O3 -std = c ++ 1z一起使用。沙箱代码https://godbolt.org/g/z89Myb
非常感谢, 亚历