我在我的 C++ 实现中看到了一个公共std::istream_iterator::_M_equal
成员函数(它用于将 istream 迭代器与其他标准全局函数进行比较)。该标准不要求用户可以使用该成员函数。
我想知道提供除标准要求之外的更多公共成员功能的实现是否仍然可以被视为“标准”。
我在我的 C++ 实现中看到了一个公共std::istream_iterator::_M_equal
成员函数(它用于将 istream 迭代器与其他标准全局函数进行比较)。该标准不要求用户可以使用该成员函数。
我想知道提供除标准要求之外的更多公共成员功能的实现是否仍然可以被视为“标准”。
是的,这是标准允许的。
所需的接口由标准文档描述,但通常不是实现它的确切方式。以下划线+大写字母开头的名称,如_M_equal
,是专门为实现保留的。
只有那些 C++ 标准规定的 api/feature 应该由符合标准的实现来支持,这些实现是标准的,实现可以自由添加自己的扩展,但它们是非标准和不可移植的,因为不需要其他实现来支持这些。
是的,这是允许的。由于不允许在std
命名空间内定义任何自己的名称,而且带有下划线大写的名称是保留的,因此格式良好的 C++ 程序不可能与这些实现细节发生名称冲突。
显然,任何可移植程序都必须使用这些额外的公共功能,尽管没有什么能阻止您在特定平台上使用它们。