Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для oobarbazanoo
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835

Почему в данном случае срабатывает неявный конструктор

15.02.2018, 01:20. Показов 2527. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему в данном случае срабатывает неявный конструктор, хотя он и помечен explicit?

Main.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "Hugo.h"
 
Hugo f();
 
Hugo f() {
    Hugo h;
    return HugoCopy(h);
}
 
int main(void) {
 
    return 0;
}
Hugo.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Hugo {
public:
    Hugo() {  }  
    explicit Hugo(Hugo const&) {  }
};
 
struct HugoCopy { 
    HugoCopy(Hugo const& hugo) 
      :hugo(hugo)
    { }
    operator Hugo const&() { return hugo; }
 
private:
    Hugo const& hugo;
};
Добавлено через 23 секунды
Взял отсюда: https://stackoverflow.com/ques... 03#4285803.

Добавлено через 8 минут
После дебага заметил что тут выходит почему-то одновременно с вызовом конструктора:
C++
1
2
3
HugoCopy(Hugo const& hugo) 
      :hugo(hugo)
    { }
Сразу после происходит вызов оператора:

C++
1
 operator Hugo const&() { return hugo; }
Кто знает, подскажите, пожалуйста, почему.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2018, 01:20
Ответы с готовыми решениями:

Как правильно вызвать конструктор вектора в данном случае?
#include <iostream> #include <fstream> #include <map> #include <vector> #include <string> using namespace std; typedef...

Почему нужен   в данном случае?
Привет всем!Собственно такой вопрос:Почему в данном случае нужен   ? И у меня при написании дескриптора <wbr>строка...

Почему типы-параметры нельзя вывести в данном случае?
static class S { public static T2 Select<T, T2>(T source, Func<T, T2> f) => new T2; public static void P() => Select(new...

20
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
29.04.2018, 15:25
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
Последнее, скорее всего относится к копи-элизиум оптимизации и к данному случаю не относится.
Тем не менее.

Цитата Сообщение от IGPIGP Посмотреть сообщение
В нашем случае (опять же - по идее) имеет место быть возможность прямого указания компилятору - применять копирующий конструктор только для случаев его явного вызова. Это может быть нужно, например, когда операция присаивания и копирующий конструктор работают с ресурсами по разному.
Ничего не понял.

Цитата Сообщение от oobarbazanoo Посмотреть сообщение
Почему в данном случае срабатывает неявный конструктор, хотя он и помечен explicit?
Кстати, зашёл сейчас на stackoverflow и, оказывается, я тут зря распинался. Там же всё объяснено в ответе:
Цитата Сообщение от https://stackoverflow.com/questions/4285608/is-there-a-explicit-copy/4285803#4285803
This relies on a subtle corner of the C++ language. So if you use this, you better know what you're doing or you don't do it: It first calls the conversion function on HugoCopy (or in the first case, the constructor of Hugo) to get a Hugo / Hugo const&, and then it direct initializes the destination Hugo object with that Hugo object. GCC doesn't like the code, but Clang and Comeau/EDG accept it according to the above semantics.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2018, 15:25

[C]Почему bind в данном случае выдаёт ошибку Address already in use?
Пытаюсь разобраться с темой сокетов. Есть клиент и сервер,которые связываются через STREAM сокет. Принцип такой: Сервер ожидает входящих...

Почему в данном коде не срабатывает присвоение
Всем привет, подскажите пожалуйста почему в данном коде не срабатывает присвоение shouldStartChecks=true и на экран всегда...

Почему в данном случае ставится двойной нижний пробел __ в цикле for?
>>> def fib(n): a = 0 b = 1 for __ in range(n): a = b + b return a >>>

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической?
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

Почему не срабатывает конструктор копирования в пользовательском классе
вроде со всем разобралась, но не заходит в конструктор копирования. В чём ошибка? #include <iostream> #include...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru