Больше открытых функций-членов, чем строго требуемых стандартом C ++ - PullRequest
1 голос
/ 11 марта 2012

Я вижу общедоступную функцию-член std::istream_iterator::_M_equal в моей реализации C ++ (она используется для сравнения итераторов istream другими стандартными глобальными функциями). Стандарт не требует, чтобы функция-член была доступна пользователю.

Я хотел бы знать, могут ли реализации, предоставляющие больше открытых функций-членов, помимо тех, которые требуются стандартом, все еще считаться "стандартными".

Ответы [ 3 ]

3 голосов
/ 11 марта 2012

Да, это разрешено стандартом.

Требуемый интерфейс описан в стандартном документе, но, как правило, не является точным способом его реализации.Имена, начинающиеся с подчеркивания + заглавной буквы, например _M_equal, специально зарезервированы для реализации.

2 голосов
/ 11 марта 2012

Да, это разрешено. Поскольку вам не разрешено определять какие-либо ваши собственные имена в пространстве имен std, и, кроме того, имена с символом подчеркивания зарезервированы, нет никаких шансов, что правильно сформированная программа C ++ может столкнуться с конфликтом имен с этой реализацией. подробности.

Очевидно, что ни одна переносимая программа не должна использовать эти дополнительные общедоступные функции, хотя ничто не мешает вам использовать их на вашей конкретной платформе.

2 голосов
/ 11 марта 2012

Только те API / функции, которые предусмотрены стандартом C ++, должны поддерживаться стандартом. Соответствующие реализации являются стандартными, реализации могут свободно добавлять свои собственные расширения, но они нестандартны и не переносимы, так как другие реализации не обязаны их поддерживать.

...