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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан текстовый файл F. найти самое долгое слово, вторая буква которых "о". если слов с одинаковой длинной несколько, то сообщить об этом http://www.cyberforum.ru/cpp-beginners/thread350198.html
Дан текстовый файл F. найти самое долгое слово, вторая буква которых "о". если слов с одинаковой длинной несколько, то сообщить об этом. Выполнить задание : а) считая, что слова состаят не более чем из 10-ти символов б) без ограничения на число символов в слове.
C++ memset, memcpy Использую MSVS 2008. Почему memcpy работает только с char? То есть, такой код работает: int main() { char a1 = "123"; char a2 ; memcpy(a2, a1, 4); http://www.cyberforum.ru/cpp-beginners/thread350189.html
C++ вывести такие числа до N,которые не делятся на 2,3,5
вывести такие числа до N,которые не делятся на 2,3,5 N вводиться с клавы
разница с и с++ C++
с этого сема у нас в универе начинается с.одни говорят что с и с++ тоже самое другие что нет. хотел спросить много ли в них разницы?и если много то вот ещё один вопрос: у мя стоит вин 7 а с как я знаю токо для линукс . если ли возможность поставить с на 7 и если есть то как?
C++ Вопрос по поводу вывода ostream... http://www.cyberforum.ru/cpp-beginners/thread350157.html
Вопрос вот в чём, как перегрузить операцию << для моего класса?#pragma once #include<iostream> #include<iomanip> class Student { public: Student(char* XName="Пусто", char* XSurname="Пусто") {
C++ Перевод из одной системы счисления в другую перевод чисел(в том числе с дробной частью) из сс q в сс p.(q, p от 2 до 16) помогите протестить: #include <iostream> #include <ostream> #include <string> #include <algorithm> #include <locale> #include <math.h> #include <sstream> подробнее

Показать сообщение отдельно
TheAthlete
 Аватар для TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
11.09.2011, 11:10     Инициализация копированием () и присваиванием =. В чем разница?
Цитата Сообщение от 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; // прямая инициализация
 
Текущее время: 14:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru