【发布时间】:2011-10-14 10:05:05
【问题描述】:
考虑 C++11 中的以下内容:
[C++11: 21.4.5]:basic_string元素访问 [string.access]const_reference operator[](size_type pos) const; reference operator[](size_type pos);1 需要:
pos <= size()。2 返回:
*(begin() + pos)如果pos < size(),否则引用类型为T且值为charT()的对象;引用的值不得修改。3 抛出:什么都没有。
4 复杂性: 恒定时间。
这意味着:
-
pos == size()案例中的引用值不得修改,或 - 在任何情况下,
op[]返回的引用值不得修改,即使对于非const重载也是如此。
第二种情况看起来完全荒谬,但我认为这是措辞最强烈的含义。
我们是否可以修改从std::string::op[] 获得的内容? 这不是很模棱两可的措辞吗?
【问题讨论】:
-
看起来你可以......但不应该。 XD 等等,答案不是应该在 SHOULD 的定义中吗?
-
@Klaim:这是关于“不应修改引用的值”的意思。
-
一个很好的问题,我的印象是c++11现在允许这样做,但很明显有一些理由怀疑它......
-
实际上,我已经让其他一些人纯粹看语言,从英语(也不是我的第一个)角度来看,
;强制后一个条件适用于整个句子,基本上就目前而言,参考值不得修改。 -
FWIW,假设我们理解我会写它的合理含义,“
*(begin() + pos)如果pos < size()。否则引用类型为charT的对象,其值为charT();该对象应不可修改。”