Конструктор
От: Аноним  
Дата: 24.07.07 19:46
Оценка:
Предыстория:
string s = "hello, world!";


Почему такое компилируется:
stringstream ss(s);


А такое нет:
stringstream ss = s;


Ведь по идее должен вызываться один и тот же конструктор?
Re: Конструктор
От: remark Россия http://www.1024cores.net/
Дата: 24.07.07 19:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А такое нет:

А>
А>stringstream ss = s;
А>


Этот код эквивалентен следующему:

stringstream ss (stringstream(s));


Т.е. что бы такой код компилировался, дополнительно должен быть доступен конструктор копирования.
Этот код:

stringstream ss (s);


не требует наличия открытого конструктора копирования.



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Конструктор
От: serge_levin Россия  
Дата: 24.07.07 19:59
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Почему такое компилируется:

А>
А>stringstream ss(s);
А>


А>А такое нет:

А>
А>stringstream ss = s;
А>


А>Ведь по идее должен вызываться один и тот же конструктор?


Потому что конструктор может быть объявлен как explicit во избежание неявного преобразования.
Re: Конструктор
От: Bell Россия  
Дата: 24.07.07 21:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Предыстория:

А>
А>string s = "hello, world!";
А>


А>Почему такое компилируется:

А>
А>stringstream ss(s);
А>


А>А такое нет:

А>
А>stringstream ss = s;
А>


А>Ведь по идее должен вызываться один и тот же конструктор?

Первый вариант — прямая инициализация.
Второй — инициализация копированием. В данном случае должен быть доступен конструктор копированиея, даже если он реально и не используется. За подробностями можно обратиться в поиск — это обсуждалось уже не раз.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Конструктор
От: Аноним  
Дата: 24.07.07 23:00
Оценка:
Здравствуйте, Bell, Вы писали:

B>Второй — инициализация копированием. В данном случае должен быть доступен конструктор копированиея, даже если он реально и не используется.


И при передаче в качестве параметре функции используется эта "инициализация копированием"?
А нафига закрыли конструктор копирования у stringstream'а?

B>За подробностями можно обратиться в поиск — это обсуждалось уже не раз.


Поиск не работает или работает фигово.
Re[3]: Конструктор
От: Bell Россия  
Дата: 25.07.07 20:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Bell, Вы писали:


B>>Второй — инициализация копированием. В данном случае должен быть доступен конструктор копированиея, даже если он реально и не используется.


А>И при передаче в качестве параметре функции используется эта "инициализация копированием"?

Да — смотри 8.5/12

А>А нафига закрыли конструктор копирования у stringstream'а?

А как должны копироваться потоки?

B>>За подробностями можно обратиться в поиск — это обсуждалось уже не раз.

А>Поиск не работает или работает фигово.
Ну есть еще и гугль
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.