Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двойная вложенность конструктора 
V
    Опции темы
borisbn
Дата 27.7.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Плохое название получилось... ну да ладно
Добрый день. Натолкнулся на такую ошибку
Код

struct iX {
  iX( const int & i ) {} 
};
struct iY {
  iY( const iX & x ){}
};

struct sX {
  sX( const std::string & s ) {}
};
struct sY {
  sY( const sX & x ){}
};

iX ix( 1 ); // ok
iY iy( 1 ); // ok

const char * const c = "q";

sX sx( c ); // ok
sY sy( c ); // error: no matching function for call to 'sY::sY(const char* const&)'
// note: candidates are:
// note: sY::sY(const sX&)
// no known conversion for argument 1 from 'const char* const' to 'const sX&'

http://liveworkspace.org/code/e8bf4aceeafd...d5efd551d7530df

вот и не могу понять, почему в случае с int всё работает, а в случае с std::string - нет ?
Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 27.7.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



borisbn

Потому что в одном случае ты передаешь int, а в другом const char*. Попробуй так
Код

const std::string c = "q";

PM   Вверх
borisbn
Дата 27.7.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



хммм. а почему тогда это
Код
double d = 1.5;
iY iy( d );

не вызывает ошибки ?
http://liveworkspace.org/code/64ac8f75e8ef...3d9a8966cc1e5e2

Это сообщение отредактировал(а) borisbn - 27.7.2011, 11:07


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Earnest
Дата 27.7.2011, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Преобразование встроенных типов, а в случае string - уже пользовательские.


--------------------
...
PM   Вверх
borisbn
Дата 27.7.2011, 11:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Earnest, ну, это-то понятно. Или Вы хотите сказать, что это по стандарту ? Не подскажете, где там это найти ( хотя бы примерно smile )


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 27.7.2011, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  27.7.2011,  10:09 Найти цитируемый пост)
, где там это найти

Если я правильно понял что Вы хотите найти, то 13.3.3.1 и 13.3.3.2.. но они тянут за собой еще кучу, так что если читать, то придется основательно выделить время smile





--------------------
PM MAIL WWW   Вверх
borisbn
Дата 27.7.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(mes @  27.7.2011,  11:49 Найти цитируемый пост)
Если я правильно понял что Вы хотите найти, то 13.3.3.1 и 13.3.3.2..

mes, спасибо ! Поняли правильно. И пункты правильные. Кажется понял:

Первое утверждение
Цитата

A well-formed implicit conversion sequence is one of the following forms:
— a standard conversion sequence (13.3.3.1.1),
— a user-defined conversion sequence (13.3.3.1.2), or
— an ellipsis conversion sequence (13.3.3.1.3).

Указанный мной метод подпадает под user-defined conversion (а именно под 12.3.1 Conversion by constructor)
далее
Цитата

4 However, when considering the argument of a user-defined conversion function that is a candidate by 13.3.1.3 when
invoked for the copying of the temporary in the second step of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
13.3.1.6 in all cases, only standard conversion sequences and ellipsis conversion sequences are allowed.

(в 13.3.1.3 как раз говорится про converting constructors)
таким образом, получается, что если пытаться конвертировать параметры через конструктор, то это можно делать через standard conversion sequences (для простых типов. для нашего случая - не подходит) или через ellipsis (...) - тоже не подходит... Т.е. - нельзя.
Всем спасибо. Закрываю.

Добавлено через 9 минут и 59 секунд
Интересно, за что мне проголосовали в минус в сообщении
Цитата(borisbn @  27.7.2011,  11:09 Найти цитируемый пост)
Или Вы хотите сказать, что это по стандарту ? Не подскажете, где там это найти




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.