比C++标准严格要求的公共成员函数更多

More public member functions than those strictly required by the C++ standard

本文关键字:成员 函数 C++ 标准 严格要求      更新时间:2023-10-16

我在C++实现中看到了一个公共std::istream_iterator::_M_equal成员函数(它用于与其他标准全局函数比较istream迭代器)。该标准不要求用户可以使用该成员功能。

我想知道,除了标准所要求的功能之外,提供更多公共成员功能的实现是否仍然可以被视为"标准"。

是的,这是标准允许的。

所需的接口由标准文档描述,但通常不是实现它的确切方式。以下划线+大写字母开头的名称,如_M_equal,专门为实现保留。

只有C++标准规定的api/功能应该得到符合标准的实现的支持才是标准的,实现可以自由添加自己的扩展,但它们是非标准的,不可移植的,因为其他实现不需要支持这些扩展。

是的,这是允许的。由于不允许在std命名空间中定义任何自己的名称,而且保留了带下划线大写的名称,因此格式良好的C++程序不可能遇到与这些实现细节的名称冲突。

显然,任何可移植程序都不必使用这些额外的公共函数,尽管没有什么可以阻止您在您的特定平台上使用它们。