gpt4 book ai didi

c++ - 标准中的小(不重要)缺陷?

转载 作者:可可西里 更新时间:2023-11-01 17:52:41 28 4
gpt4 key购买 nike

这个问题没有与之相关的实际问题,它更多的是一个好奇的问题,想知道我是否过于字面意思;)。

所以我一直在努力尽可能多地理解 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] 实现,因为那会初始化一个类型的引用char& 来自 const 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.

所以也许我只是偶然发现了一些已经讨论过的东西。

最佳答案

是的,这是一个缺陷,是的,这是修复。

http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-defects.html#259

关于c++ - 标准中的小(不重要)缺陷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3189475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com