可以在constexpr中使用std :: string吗?
使用C ++ 11,Ubuntu 14.04,GCC默认工具链 。
此代码失败:
constexpr std::string constString = "constString";
错误:constexprvariables'constString'的types'const string {aka const std :: basic_string}'不是文字…因为…'std :: basic_string'有一个非平凡的析构函数
可以在constexpr
使用std::string
吗? (显然不是…)如果是这样,怎么样? 在constexpr
有没有其他的方法来使用string?
不,你的编译器已经给了你一个全面的解释。
但是你可以这样做:
constexpr char constString[] = "constString";
在运行时,这可以用来在需要的时候构造一个std :: string。
在C ++ 17中,你可以使用string_view
:
using namespace std::string_view_literals; constexpr std::string_view sv = "hello, world"sv;
由于问题是非平凡的析构函数,因此如果析构函数从std::string
被移除,那么可以定义该types的constexpr
实例。 喜欢这个
struct constexpr_str { char const* str; std::size_t size; // can only construct from a char[] literal template <std::size_t N> constexpr constexpr_str(char const (&s)[N]) : str(s) , size(N - 1) // not count the trailing nul {} }; int main() { constexpr constexpr_str s("constString"); // its .size is a constexpr std::array<int, s.size> a; return 0; }