Почему конструктора копии не вызывают в этом случае?

Такая платформа, по своей природе, не могла использовать в своих интересах определенные для iPhone функции как жесты мультипальца или акселерометр. Это также, вероятно, освободило бы условия SDK Apple.

Как andyuk предложенный, рассмотрите запись веб-приложения. Основные функции, такие как вызов кого-то могут быть полученными доступ тот путь.

11
задан BostonLogan 18 November 2009 в 18:40
поделиться

3 ответа

Из другого комментария: «Поэтому по умолчанию я не должен полагаться на него (так как это может зависеть от компилятора)»

Нет, это не зависит от компилятора, практически в любом случае. Любой компилятор, достойный песчинки, не будет тратить время на построение A, а затем на его копирование.

В стандарте прямо говорится, что полностью приемлемо для T = x; быть эквивалентом говоря T (x); . (§12.8.15, стр. 211) Выполнение этого с T (T (x)) , очевидно, излишне, поэтому он удаляет внутренний T .

Чтобы получить желаемое поведение, вы заставите компилятор по умолчанию построить первый A:

A a;
// A is now a fully constructed object,
// so it can't call constructors again:
a = A(5);
14
ответ дан 3 December 2019 в 04:33
поделиться

Здесь у вас есть инициализация копирования из a из временного A (5) . Реализация позволила пропустить здесь вызов конструктора копирования в соответствии со стандартом C ++ 12.2 / 2.

4
ответ дан 3 December 2019 в 04:33
поделиться
A a = A(5);

Эта строка эквивалентна

A a(5);

Несмотря на то, что Внешний вид функционального стиля, первая строка просто создает a с аргументом 5. Никакого копирования или временных файлов не требуется. Из стандарта C ++, раздел 12.1.11:

Преобразование функционального типа нотации (5.2.3) может использоваться для создания новых объектов этого типа. [ Обратите внимание синтаксис выглядит как явный вызов конструктора. —В конце примечания]

-1
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: