代码之家  ›  专栏  ›  技术社区  ›  Evan Teran

标准中的轻微(不重要)缺陷?

  •  8
  • Evan Teran  · 技术社区  · 16 年前

    因此,我一直在努力尽可能多地理解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[] 不能作为简单的 return data()[pos] 因为这将初始化一个类型为 char& 从类型的表达式 const char .

    我认为很明显 意图 是吗 执行类似于 return data_; 和 实施为 return data_[pos]; 或者功能相似的东西,但这不是标准所说的。

    如果我没记错的话,实现者有一定的回旋余地,他们可以随心所欲地实现一些东西,只要它满足给定的基本要求,并且具有相同的净效果。

    所以问题是,我是不是 方式 太文字化了,或者这是一种会被认为是缺陷的类型。

    值得注意的是,c++0x草案将措辞改为:

    Returns: If pos < size(), returns *(begin() + pos).
             Otherwise, if pos == size(), the const version returns charT().
             Otherwise, the behavior is undefined.
    

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

    2 回复  |  直到 15 年前
        1
  •  6
  •   CB Bailey    16 年前

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

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

        2
  •  1
  •   James Curran    16 年前

    我想他们用过 data() data_ 因为他们想严格按照公共接口来定义。