为什么std :: basic_string不支持通过表达式模板进行连接?

rub*_*nvb 4 c++ string qstring std expression-templates

QString可以连接Qt ,operator%它使用表达式模板来预先计算结果字符串的大小并优化几个链式调用operator+.有关详细信息,请参阅我的这个问题.

为什么没有std::basic_string采用类似的结构?这甚至是每个C++ 11允许的吗?我看到只有优点,显然ABI兼容性可以被库实现者在他们想要的时候打破(并且C++ 11提供了一个很好的理由,甚至对于libstdc ++).

Nic*_*las 5

因为没有人提出这个标准; 除非有人提出某些建议,否则它不会进入.此外,因为它可能会破坏现有代码(如果他们使用的operator+话).

此外,表达模板在存在时不能很好地工作auto.做一些简单的事情auto concat = str1 % str2;很容易被打破.希望这是C++ 17将通过某种方式解决的问题.

  • @rubenvb:`auto`对表达式模板造成的问题与任何其他"透明"包装器一样:它会推断`concat`的类型与表达式模板包装器相同,而不是`std :: string` . (4认同)
  • @rubenvb:`str1%str2`的类型是什么? (2认同)