仅在 C++ 标准中进行阐述?

问题描述 投票:0回答:4

C++ 标准中的exposition only 究竟意味着什么?这是否意味着标有“仅公开”的私有/受保护成员需要按标准存在,或者它们只是实现的“建议”,根本不需要? 示例包括:

std::error_code::val_ std::wstring_convert::byte_err_string std::array::elems std::move_iterator::current std::reverse_iterator::current std::ostream_iterator::delim // And a lot of others


c++ c++11 std standards reverse-iterator
4个回答
18
投票
可能

是什么样子,以说明标准委员会想要什么样的实现。 这基本上是一种传达意图的方式。


14
投票

例如,假设我想指定一个公开包装的指针包装类。我可以说,“类 Foo 持有对

T

类型对象的引用,该对象被赋予其构造函数,并且

Foo::get
公开该对象。”这是非常冗长和不精确的。或者,我可以使用仅说明成员来指定这一点:

Foo

持有对
T

类型的对象的引用。


class Foo { const T* ptr; // exposition-only public: // Constructor // \ Foo(const T& t) : ptr(std::addressof(t)) {} // | // > real specification // Accessor // | const T& get() const { return *ptr; } // / };


当我被允许引用某些特定的实现时,各个成员函数的规范变得更加容易,但可以理解的是,您可以以任何您喜欢的方式实现它(例如使用基类或私有嵌套类型),并且成员
Foo::ptr
不是

规范的一部分。但有了它,我就可以用代码而不是文字来指定成员函数的语义。

    
n4296 17.5.2.3/2


6
投票
外部有时需要某些类的对象 他们的类存储数据的规范,显然是在成员中 对象。为了便于说明,一些子条款规定 私有的代表性声明和语义要求 满足外部规范的类的成员对象 类。此类成员对象的声明和定义 相关成员类型后跟以结尾的注释 仅说明,如:

streambuf* sb; // exposition only

它表示实现特定项目的多种可能方法之一,但不一定是最好的方法。

4
投票
这个

答案。

© www.soinside.com 2019 - 2024. All rights reserved.