Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
KristopherRobin
138 / 134 / 6
Регистрация: 11.09.2011
Сообщений: 407
#1

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

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

в чем разница инициализации в скобках от инициализации присваиванием?
C++
1
2
3
4
5
int a=5;
int b(5);  //в чем разница от первого варианта?
 
int j=6;
int k(j);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 09:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация копированием () и присваиванием =. В чем разница? (C++):

В чем разница между инициализацией и присваиванием? - C++
в чем разница между инициализацией и присваиванием? практически это одно и тоже,кроме инициализации ссылок-они могут менять значение.

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

'0' и 0, в чем разница? - C++
Подскажите пожалуйста, если я напишу число в ' ' или число без кавычек, то что изменится? Код элемента(цифры)? И для чего это нужно? ...

в чем разница? - C++
вот такая вот конструкция (условие)?ложь:истина дает такой же результат if(условие){истина}else{ложь} хотелось бы...

В чем разница - C++
В чем разница между: typedef double(*Function_ptr)(double); и typedef double Function(double); Первое - это указатель на...

В чем разница - C++
Здравствуйте. Я новичок, как здесь, так и в программировании, только учусь. И ищя литературу прочитывал кучу информации, наткнулся на этот...

4
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 09:54 #2
тут - ни в чем, инициализация скобками осталась от Fortran
0
soft.creator
104 / 104 / 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; // оператор присваивания (оба объекта уже существуют)
2
LosAngeles
Заблокирован
11.09.2011, 10:31 #4
Цитата Сообщение от Dani Посмотреть сообщение
тут - ни в чем, инициализация скобками осталась от Fortran
и для встроенных типов инициализация скобками играет важную роль(при написании шаблонов)
0
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 536
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; // прямая инициализация
2
11.09.2011, 11:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 11:10
Привет! Вот еще темы с ответами:

В чем разница? - C++
Здравствуйте! Хотел узнать, в чем разница между С++ которым писали в старом добром BorlandC, в студии и VisualC++? Думал тем, что...

В чем разница. - C++
Извиняюсь за тупой вопрос, но в чем разница. оператора ++ к примеру. a=b++ и a=++b ?

В чем разница? - C++
Скажите в чем разница между двумя кусками кода: std::string a; while ((std::cin>>a)!="Quit") { std::cout<<a; ...

Чем отличается между собой объявление, инициализация и определение? - C++
То есть объявление может быть у переменной или функции и выглядеть к примеру так : int a; void func (int); .Но выделяется ли на этом этапе...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.