可以在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; }