为什么STL中没有常量表达式字符串构造函数?

nya*_*108 2 c++ string stl constexpr c++11

似乎在 C++ 中,在静态内存中完全拥有字符串文字的唯一方法是将它们声明为:

class A
{
    static const char const * = "Hello World";
};
Run Code Online (Sandbox Code Playgroud)

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

Tar*_*ama 5

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

它是Library Fundamentals TS 的一部分,该文件已经发布并且可能会加入到 C++17 中。

  • 不幸的是,虽然 `constexpr string_view::string_view(const char*)` 是 `constexpr`,它调用了 `char_traits<char>::length`,而不是 `constexpr`,所以它仍然无法工作。例如,`static const constexpr std::experimental::string_view sv("Hello, world");` 不会编译。虽然我不同意,但其他委员会成员告诉我这是按设计工作的。 (4认同)