Форум » C/C++ » Дефект Стандарта C++ относительно класса std::basic_string » Ответить

Дефект Стандарта C++ относительно класса std::basic_string

Сыроежка: В классе std::basic_string имеется один к одному отношение между конструкторами и соответствующими функциями членами класса assign за исключением явного конструктора, так как он не принимает параметра-источника копирования данных. Среди этих конструкторов имеется конструктор, объявленный следующим образом [pre2]basic_string(const basic_string& str, size_type pos, size_type n = npos, const Allocator& a = Allocator());[/pre2] . Ему в соответствие ставится следующая функция член класса assign basic_string& assign(const basic_string& str, size_type pos, size_type n); Как видно, у третьего параметра этой функции отсутствует аргумент по умолчанию, который имеется у аналогичного параметра соответствующего конструктора. Я не вижу причин, по которым нельзя указать аргумент по умолчанию для этого параметра функции assign. На мой взгляд это серьезный дефект стандарта С++, и данная функция член класса assign должна определяться следующим образом: basic_string& assign(const basic_string& str, size_type pos, size_type n = npos ) ; Пока никаких возражений со стороны членов Комитета по стандартизации C++ я не услышал.

Ответов - 3

Сыроежка: Все, что было описано выше относительно функции члена класса assign также справедливо и для таких фцнкций членов класса, как append и insert. То есть их объявления также должны включать аргумент по умолчанию для параметра, задающего количество обрабатываемых символов строки.

Сыроежка: Мое предложение по добавлению аргумента по умолчанию для функций членов класса std::basic_string включено Комитетом по стандартизации в список активных вопросов для стандартной библиотеки C++. Его номер 2268. С текстом предложения можно ознакомиться по ссылке C++ Standard Library Active Issues List (Revision D84)

Сыроежка: Похоже, что мое предложение по устранению описанного дефекта, связанного с отсутствием аргумента по умолчанию в определении некоторых функций класса std::basic_string, было одобрено и войдет в стандарт C++ 2014. С изменением статуса моего предложения можно ознакомиться здесь Как сообщил Daniel Krügler мое предложение включено в рабочий проект стандарта (C++ Working Draft) с номером №3936, но пока еще этот документ публично не доступен. P.S. Как оказалось, есть доступ к этому документу на GitHub. Так что есть шанс загрузить этот документ отсюда




полная версия страницы