【问题标题】:Why there is no constant expression string constructor in the STL?为什么 STL 中没有常量表达式字符串构造函数?
【发布时间】:2016-02-17 18:25:17
【问题描述】:

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

class A
{
    static const char const * = "Hello World";
};

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

【问题讨论】:

  • std::experimental::string_view 是您要找的吗?
  • 下次发帖前请先编译好你的代码......
  • @TartanLlama 是的,确实如此,谢谢。名称 string_view 无助于谷歌搜索。不知道这个实验课是安排在c++17上的吗?
  • static constexpr char bob[]="Hello World"; 与您的版本不同,但也在静态内存中。与您的版本不同,我们没有丢弃缓冲区大小信息。

标签: c++ string c++11 stl constexpr


【解决方案1】:

您可能正在寻找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"); 不会编译。虽然我不同意,但其他委员会成员告诉我这是按设计工作的。
  • @Nevin 这怎么行?如果我没记错的话,一个 constexpr 子例程只能调用其他 constexpr 子例程...
  • @nyarlathotep108 我被告知 basic_string_view 构造函数上的 constexpr 仅适用于那些使用自己的特征而不是 std::char_traits 而不是string_view、wstring_view、u16string_view 和 u32string_view 的用户,与 pair 具有 constexpr 构造函数的方式大致相同。郑重声明,我不同意这个立场。无论如何,LWG 2232 详细说明了为什么这对于 char_traits 来说不容易解决。
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 2011-10-19
  • 2014-02-23
  • 2011-08-13
相关资源
最近更新 更多