【发布时间】:2011-03-12 11:52:10
【问题描述】:
这个问题没有与之相关的实际问题,更多的是出于好奇和想知道我是否过于字面意思;)。
所以我一直在努力尽可能多地理解 c++ 标准。今天在研究标准时,我注意到了这一点(ISO/IEC 14882:2003 21.3.4):
const_reference operator[](size_type pos) const;
reference operator[](size_type pos);
Returns: If pos < size(), returns data()[pos].
Otherwise, if pos == size(), the const version returns charT().
Otherwise, the behavior is undefined.
对我来说似乎很理智。但后来我想,等一下data()的定义是什么?
const charT* data() const;
是的,它返回一个 const charT*。
很明显,operator[] 的非 const 版本不能实现为简单的 return data()[pos],因为那会从 const char 类型的表达式初始化 char& 类型的引用。
我认为很明显意图是data()被实现为return data_;和operator[]被实现为return data_[pos];或功能相似的东西,但这不是什么标准说:-P。
如果我没记错的话,实施者有一些回旋余地,只要满足给定的基本要求并具有相同的净效果,他们就可以按照自己的意愿实施。
所以问题是,我是否方式过于字面意思,或者这会被视为缺陷的类型。
编辑:值得注意的是,c++0x 草案已将措辞改为:
Returns: If pos < size(), returns *(begin() + pos).
Otherwise, if pos == size(), the const version returns charT().
Otherwise, the behavior is undefined.
所以也许我刚刚偶然发现了一些已经讨论过的东西。
【问题讨论】:
-
我本来打算建议看看新的草案标准,但你领先于我。像这样的小问题并不少见。
-
标准是人写的,不是神写的:)
-
@Nikolai:当然,我只是好奇这种事情是否会被认为是缺陷,或者我的解释有点过于直白了。
标签: c++ string standards defects