这个问题没有实际问题,更多的是好奇和想知道是否我过于字面理解。所以我一直在努力理解尽可能多的C++标准。今天在深入了解标准时,我注意到这个(ISO/IEC 14882:2003 21.3.4):
是的,它返回一个
显然,
我认为,明显的意图是
如果我没记错的话,实现者在实现时有一定的自由度,只要满足基本要求并具有相同的净效果即可。
所以问题是,我是过于字面了,还是这种情况会被认为是缺陷。
编辑:值得注意的是,c++0x草案已经改变了措辞:
也许我刚刚偶然发现了已经讨论过的东西。
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[]
的非常量版本不能被实现为简单的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.
也许我刚刚偶然发现了已经讨论过的东西。