Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Инициализация копированием

18.11.2019, 15:08. Показов 1761. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте
C++
1
2
3
4
5
struct Widget {
  Widget(int) {}
};
 
Widget w1 = 1; // вызывает Widget(double)
почему
C++
1
Widget w1 = 1;
равен
C++
1
Widget w1(1);
?
В чем разница между ними ? Разве
C++
1
Widget w1 = 1;
не должен сначала преобразовать 1 в Widget, а потом только вызвать конструктор копирования?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2019, 15:08
Ответы с готовыми решениями:

Инициализация копированием () и присваиванием =. В чем разница?
в чем разница инициализации в скобках от инициализации присваиванием? int a=5; int b(5); //в чем разница от первого варианта? int...

Работа с файлом и копированием данных
Ребят, привет. Помогите пожалуйста, уже довольно таки долго пытаюсь реализовать программу, которая из файла будет копировать 3 столбец...

Проблемы с переименовыванием и копированием файлов в определенной последовательности
Здраствуйте. И с ходу): Есть папка "in", в ней есть текстовый файл (1.txt), в нем ряд цифер (без пробелов). В этой же папке есть 10...

8
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
18.11.2019, 15:14
ReYalp,
Так и есть
Просто копирование пропускается в целях оптимизации
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.11.2019, 15:21  [ТС]
Undisputed, тоесть сразу вызывается подходящий для 1 конструктор Widget и все?
А можно как-то отключить оптимизацию в Visual Studio либо gcc чтобы посмотреть как будет?

Добавлено через 44 секунды
Undisputed, и какой смысл в explicit тогда если есть оптимизация?
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,099
18.11.2019, 15:23
ReYalp, это не оптимизация, эти записи эквивалентны

C++
1
2
3
Widget w1 = 1;
Widget w1(1);
Widget w1{1};
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
18.11.2019, 15:30  [ТС]
Алексей1153, но они не могут быть эквивалентны т.к. в случае
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Widget w1 = 1;
explicit конструктор не сработает, а
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Widget w1(1);
сработает.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
18.11.2019, 15:31
ReYalp,
Gcc флаг fno-elide-constructors
https://rextester.com/IWB88369
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
18.11.2019, 15:32
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

Цитата Сообщение от Алексей1153 Посмотреть сообщение
эти записи эквивалентны
Это разные типы инициализации.
C++
1
2
Widget w1 = 1;//copy-initialization
Widget w1(1);//direct-initialization
Цитата Сообщение от ReYalp Посмотреть сообщение
и какой смысл в explicit тогда если есть оптимизация?
Конструктор, объявленный с explicit перестает быть конвертирующим.
Как следствие
C++
1
2
3
4
5
6
7
8
struct Widget
{
    explicit Widget(int x) {}
};
 
//...
Widget w2(1);//ok
Widget w1 = 1;//error
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
18.11.2019, 15:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//g++  5.4.0
 
#include <iostream>
 
struct f
{
     f(int){std::cout << "int";}
     f(const f&){std::cout << "copy";}
};
 
int main()
{
    f obj = 1;
}
Это был код в дополнение к моему посту выше
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
18.11.2019, 15:35
Цитата Сообщение от ReYalp Посмотреть сообщение
Undisputed, и какой смысл в explicit тогда если есть оптимизация?
Иногда нежелательно неявное приведение. Например при передаче параметра в функцию.
Цитата Сообщение от ReYalp Посмотреть сообщение
Алексей1153, но они не могут быть эквивалентны т.к.
Они не эквивалентны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2019, 15:35
Помогаю со студенческими работами здесь

как написать программу с копированием одномерных массивов
Даны два массива, в первом найти позицыю первого нулевого элемента массива. Скопировать во второй массив все элементы расположиные после...

Реализовать функцию Copy(s, i, n), возвращающую строку, полученную копированием из строки s n символов
C++ 1.Реализовать функцию Copy(s, i, n), возвращающую строку, полученную копированием из строки s n символов, начиная с i-го. Не...

Что такое инициализация сегментов или инициализация регистров?
Подскажите, что такое инициализация сегментов или инициализация регистров? Вот строчка программы из ассемблера: mov Ax, DATA mov DS, AX

Проблемы с копированием
#!/bin/bash src=&quot;/usr/share/doc&quot; dst=&quot;$HOME/doc&quot; find $src -type f ! -name &quot;*.*&quot; FILE1=$dst${FILE #$src}.txt cp FILE1...

Трудности с копированием
При копировании из Google, текста с картинками в Word,последующие картинки, отображаются идентичными первой картинке.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru