Форум программистов, компьютерный форум CyberForum.ru

Инициализация копированием () и присваиванием =. В чем разница? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
KristopherRobin
 Аватар для KristopherRobin
137 / 133 / 6
Регистрация: 11.09.2011
Сообщений: 407
11.09.2011, 09:51     Инициализация копированием () и присваиванием =. В чем разница? #1
в чем разница инициализации в скобках от инициализации присваиванием?
C++
1
2
3
4
5
int a=5;
int b(5);  //в чем разница от первого варианта?
 
int j=6;
int k(j);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 09:51     Инициализация копированием () и присваиванием =. В чем разница?
Посмотрите здесь:

C++ В чем разница.
В чем разница? C++
C++ в чем разница?
C++ В чем разница
В чем разница C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 09:54     Инициализация копированием () и присваиванием =. В чем разница? #2
тут - ни в чем, инициализация скобками осталась от Fortran
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
11.09.2011, 10:08     Инициализация копированием () и присваиванием =. В чем разница? #3
Разницы в данном случае никакой, см. пример:
C++
1
2
3
4
5
class X;
X x; // конструктор
X y(x); // конструктор копирования
X z = x; // тоже конструктор копирования (создание с одновременной инициализацией)
y = z; // оператор присваивания (оба объекта уже существуют)
LosAngeles
Заблокирован
11.09.2011, 10:31     Инициализация копированием () и присваиванием =. В чем разница? #4
Цитата Сообщение от Dani Посмотреть сообщение
тут - ни в чем, инициализация скобками осталась от Fortran
и для встроенных типов инициализация скобками играет важную роль(при написании шаблонов)
TheAthlete
 Аватар для TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
11.09.2011, 11:10     Инициализация копированием () и присваиванием =. В чем разница? #5
Цитата Сообщение от KristopherRobin Посмотреть сообщение
в чем разница инициализации в скобках от инициализации присваиванием?
Не инициализация присваиванием, а инициализация копии.

Язык С++ поддерживает две формы инициализации переменных: инициализация копии (copy-initialization) и прямая инициализация (direct-initialization). Синтаксис инициализации копии подразумевает использование знака равенства (=), а при прямой инициализации исходное значение помещают в круглые скобки.

C++
1
2
int ival (1024); // прямая инициализация
int ival = 1024; // инициализация копии
В обоих случаях переменная ival инициализируется значением 1024.
Т.е. здесь речь идет о знаке равенства, а не об операторе присвоения. Дело в том, что в языке С++ это принципиально - инициализацияя не является присвоением. Инициализация осуществляется при создании переменной, т.е. именно запись в память исходного значения создает переменную. Присвоение подразумевает предварительное удаление текущего значение объекта и замену его новым.

Как правило, различие между прямой инициализацией и инициализацией копий заключается скорее в вопросах низкоуровневой оптимизации. Прямая инициализация подразумевает непосредственный вызов конструктора с соответствующими аргументами. Инициализация копии подразумевает применение конструктора копий. Например,

C++
1
2
3
4
string null_book = "9-999-99999-9"; // инициализация копии
string dots(10, '.'); // прямая инициализация
string empty_copy = string(); // инициализация копии
string empty_direct; // прямая инициализация
Yandex
Объявления
11.09.2011, 11:10     Инициализация копированием () и присваиванием =. В чем разница?
Ответ Создать тему
Опции темы

Текущее время: 03:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru