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

Доступность копирующего конструктора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программирование звука Wav http://www.cyberforum.ru/cpp/thread1010884.html
Подскажите, как кодировать и декодировать Wav файл. Как изначальные значения аналогового сигнала переводятся в сэмплы и как сделать обратное преобразование? Какое опорное значение брать при пересчете...
C++ Как декодировать не последовательные кадры в WebM VP8 ? В общем-то попросил коллега узнать, сам он не русский, а я к c++ никакого отношения не имею, так что не судите строго… Использует он в своём проекте WebM VP8 и при декодировании кадров не по... http://www.cyberforum.ru/cpp/thread1010598.html
C++ Новичек
Приветствую! хочу начать изучение с++, моя мечта, но знаний нет ни каких, вообще полный 0, но есть желание, с чего начать? видео-уроки какие либо, или учебники.
C++ Как получить названия классов, используя libxml2
Есть такой html код <tr class="tr-odd "> <td class="td-npair">6</td> <td class="td-time">17:40 - 19:05</td> <td class="td-sbname">Электроника</td> <td...
C++ Программная установка расширений для браузеров http://www.cyberforum.ru/cpp/thread1006085.html
Доброго времени суток! Заранее скажу, что перед тем как спрашивать на форуме, устроил dos атаку на поисковики:) У меня возникла проблема с программной установкой расширения для браузеров. ...
C++ Составить программу для выделения D - экстремального подмножества в заданном графе согласно указанному алгоритму его выделения Задание. Составить программу для выделения D - экстремального подмножества в заданном графе согласно указанному алгоритму его выделения д) Произвольный граф из n = 13 вершин и m = 25 ребер,... подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045

Доступность копирующего конструктора - C++

18.11.2013, 18:07. Просмотров 425. Ответов 6
Метки (Все метки)

Всем привет.

Не так давно в одной из тем была упомянута статья Герба Саттера Variable Initialization – or Is It?.

По статье остался не понятен момент в п.1 при описании кода (f), (g). В частности абзац:

Note that I said “conceptually” a few times above. That’s because practically compilers are allowed to, and routinely do, optimize away the temporary and, if an implicit conversion is available, convert (f) to (d), thus optimizing away the extra move operation. However, even when the compiler does this, the widget copy constructor must still be accessible, even if is not called—the copy constructor’s side effects may or may not happen, that’s all.
Правильно ли я понял, что для случая:
C++
1
widget w = x;
даже когда компилятор может убрать лишние вызовы конструкторов, копирующий конструктор (даже если он не вызывается) должен быть доступен?

Если я понял правильно, то это не совсем соответствует действительности:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
class C
{
public:    
    C() { cout << "C()" << endl; }
    C( int ) { cout << "implicit C(int)" << endl; }
    C( C&& ) { cout << "C(C&&)" << endl; }
    C& operator= ( const C& ) { cout << "operator=" << endl; return *this; }
    //C( const C& ) { cout << "C(const C&)" << endl; }
private:
    C( const C& ) = delete; 
    //C( C&& ) = delete;
};
 
int main() {
    C c1 = 10;
    return 0;
}
Вызывает только один конструктор с целым аргументом:
http://coliru.stacked-crooked.com/a/07558605af3d97b0

Добавляем опцию --no-elide-constructors и получаем еще вызов конструктора перемещения:
http://coliru.stacked-crooked.com/a/ab8813cbab372651

И если теперь убрать конструктор перемещения:
C++
1
C( C&& ) = delete;
, то будет ошибка:
http://coliru.stacked-crooked.com/a/00751bae83617dec
use of deleted function 'C::C(C&&)'
Ну и если снова убрать --no-elide-constructors получим ту же ошибку:
http://coliru.stacked-crooked.com/a/235703e12a3039fd

Т.е. получается, что Саттер вроде как прав, но речь должна идти о конструкторе перемещения, а не копирования.

Поправьте меня, если я не прав.

Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru