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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программирование звука Wav http://www.cyberforum.ru/cpp/thread1010884.html
Подскажите, как кодировать и декодировать Wav файл. Как изначальные значения аналогового сигнала переводятся в сэмплы и как сделать обратное преобразование? Какое опорное значение брать при пересчете в громкость?
C++ Как декодировать не последовательные кадры в WebM VP8 ? В общем-то попросил коллега узнать, сам он не русский, а я к c++ никакого отношения не имею, так что не судите строго… Использует он в своём проекте WebM VP8 и при декодировании кадров не по порядку у него возникают аномалии, примем визуально вот тут http://www.youtube.com/watch?v=-h6v4ebURqM. Может есть у кого какие идет? P.S. Оригинал вопроса в английском варианте... http://www.cyberforum.ru/cpp/thread1010598.html
C++ Новичек
Приветствую! хочу начать изучение с++, моя мечта, но знаний нет ни каких, вообще полный 0, но есть желание, с чего начать? видео-уроки какие либо, или учебники.
Составить блок-схему по коду C++
помогите составить блок схему для данного примера: http://pixs.ru/showimage/Bezimyanni_9845301_9760005.png
C++ Как получить названия классов, используя libxml2 http://www.cyberforum.ru/cpp/thread1006668.html
Есть такой 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 class="td-type">Лекция</td> <td class="td-initials">Паутов В. И.</td> <td class="td-aname">Р-339</td> </tr>
C++ Программная установка расширений для браузеров Доброго времени суток! Заранее скажу, что перед тем как спрашивать на форуме, устроил dos атаку на поисковики:) У меня возникла проблема с программной установкой расширения для браузеров. Пробовал устанавливать методом занесения в реестр Windows, так как написано здесь: http://developer.chrome.com/extensions/external_extensions.html (Using the Windows registry). Make the .crx... подробнее

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

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

18.11.2013, 18:07. Просмотров 403. Ответов 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

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

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

Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru