为什么STL中没有常量表达式字符串构造函数? 似乎在C++中,在静态内存中完全有字符串字的唯一方法是声明为: class A { static const char const * = "Hello World"; };

为什么STL中没有常量表达式字符串构造函数? 似乎在C++中,在静态内存中完全有字符串字的唯一方法是声明为: class A { static const char const * = "Hello World"; };,c++,string,c++11,stl,constexpr,C++,String,C++11,Stl,Constexpr,我注意到std::string没有常量表达式构造函数。 我知道std::string实现基于动态分配,但是为什么没有另一个符合std::string的string类可以完成这项工作呢?您可能正在寻找的,它允许以统一的方式访问标准字符串类型和C字符串,高效的方式 它是的一部分,已经发布,可能会进入C++17。是您想要的吗?下次请在发布之前编译您的代码。…@TartanLlama是的,确实是,谢谢。名称字符串_视图无助于用谷歌搜索它们。你知道这门实验课是否安排在c++17上吗?static cons

我注意到std::string没有常量表达式构造函数。 我知道std::string实现基于动态分配,但是为什么没有另一个符合std::string的string类可以完成这项工作呢?

您可能正在寻找的,它允许以统一的方式访问标准字符串类型和C字符串,高效的方式


它是的一部分,已经发布,可能会进入C++17。

是您想要的吗?下次请在发布之前编译您的代码。…@TartanLlama是的,确实是,谢谢。名称字符串_视图无助于用谷歌搜索它们。你知道这门实验课是否安排在c++17上吗?
static constexpr char bob[]=“Hello World”
与您的版本不同,但也在静态内存中。与您的版本不同,我们没有丢弃缓冲区大小信息。不幸的是,虽然
constepr string\u view::string\u view(const char*)
constepr
,但它调用
char\u traits::length
,而不是
constepr
,因此它仍然无法工作。例如,
static const constepr std::experional::string_view sv(“你好,世界”)无法编译。虽然我不同意,但其他委员会成员告诉我这是设计好的。@Nevin这怎么行?如果我记得很清楚的话,一个constexpr子例程只能调用其他constexpr子例程…@nyarlathotep108我被告知基本的字符串视图构造函数上的constexpr在这一点上,只适用于那些使用自己的traits而不是std::char\u traits的人,而不适用于字符串视图、wstring\u视图的用户,u16string_视图和u32string_视图,与该对具有constexpr构造函数的方式大致相同。作为记录,我不同意这个立场。无论如何,我们将详细讨论为什么这对于char_特征来说不容易解决。