как инициализировать аргументы функции, которые являются классами со значением по умолчанию - PullRequest
10 голосов
/ 21 ноября 2010

Я работаю в среде Linux gcc и мне нужно инициализировать аргументы функций, которые являются классами со значениями по умолчанию.Когда я делаю это с временным экземпляром класса, он выдает такую ​​ошибку: «Аргумент по умолчанию для [аргумента функции] имеет тип [имя класса]. Например:

void foo(std::wstring& str = std::wstring())

Ошибка: аргумент по умолчанию для 'std :: wstring & str 'имеет тип' std :: wstring 'PS Этот код скомпилирован без ошибок или предупреждений с помощью VC ++.

Как я могу инициализировать значение по умолчанию?

Ответы [ 3 ]

10 голосов
/ 21 ноября 2010

Вы можете просто создать перегрузку функции:

void foo() {
    std::wstring str;
    foo(str);
}

но я очень скучаю.

EDIT: Я имею в виду, что целью этой функции почти наверняка является изменение входной строки. Если вы предоставляете пустую строку ввода, к которой вы не можете получить доступ позже, зачем?

9 голосов
/ 21 ноября 2010

Это должно не компилироваться. Вы пытаетесь привязать значение к неконстантной ссылке. Скажите std::wstring const & str и оно должно работать.

4 голосов
/ 21 ноября 2010

Нельзя связывать неконстантные ссылки с r-значениями. Передача по значению будет работать:

void foo(std::wstring str = std::wstring())

Или передача по ссылке на const:

void foo(const std::wstring& str = std::wstring())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...