145 / 142 / 11
Регистрация: 11.09.2011
Сообщений: 410
1

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

11.09.2011, 09:51. Показов 7786. Ответов 4
Метки нет (Все метки)

в чем разница инициализации в скобках от инициализации присваиванием?
C++
1
2
3
4
5
int a=5;
int b(5);  //в чем разница от первого варианта?
 
int j=6;
int k(j);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2011, 09:51
Ответы с готовыми решениями:

В чем разница между инициализацией и присваиванием?
в чем разница между инициализацией и присваиванием? практически это одно и тоже,кроме...

Инициализация классов в чём разница?
Есть класс: class appLog { public void Write(string inputText, bool newLine =...

Инициализация полей - в чем разница двух приведенных реализаций
class first { public first() { a=5; b="строка"; } int a;...

Инициализация копированием
Здравствуйте struct Widget { Widget(int) {} }; Widget w1 = 1; // вызывает Widget(double)...

4
1404 / 646 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.09.2011, 09:54 2
тут - ни в чем, инициализация скобками осталась от Fortran
0
106 / 106 / 11
Регистрация: 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; // оператор присваивания (оба объекта уже существуют)
3
Заблокирован
11.09.2011, 10:31 4
Цитата Сообщение от Dani Посмотреть сообщение
тут - ни в чем, инициализация скобками осталась от Fortran
и для встроенных типов инициализация скобками играет важную роль(при написании шаблонов)
0
173 / 169 / 19
Регистрация: 31.08.2010
Сообщений: 573
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; // прямая инициализация
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2011, 11:10
Помогаю со студенческими работами здесь

Какая разница между глубинным и поверхностным копированием?
Всем привет.Обясните пожалуйста в чем разница между глубинным и поверхностным...

Разница между копированием exe файла в адресное пространство и созданием образа
Не понимаю. "Вместо выделения какого-то пространства из страничного файла система использует...

Инициализация vs Присваивания. Если ли разница?
Доброго времени суток. Читал книгу по Си ещё 1998 года: Однако, мне кажется, что разницы (в...

Инициализация в теле конструктора или в списке инициализации, есть ли разница в сгенерированном коде?
Инициализация в теле конструктора или в списке инициализации - большая ли разница в сгенерированном...

Чем отличаются инициализация класса
Здравствуйте, подскажите какая разница между 40 и 41 строками? #include <iostream> #include...

Подскажите, в чем ошибка? Инициализация строки
Код: #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct person{ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru