Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238

Explicit конструкторы

12.09.2019, 14:54. Показов 4444. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для чего нужны explicit конструкторы? Если для неявного преобразования типов то почему тогда они запрещают
делать Foo foo1 = foo? но если сделать Foo foo1(foo) то все окей.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
class Foo
{
public:
    Foo(){"SIMPLE CONSTRUCTOR\n";}
    Foo(int v) {
        std::cout << "INT CONSTRUCTOR\n";
    }
    explicit Foo(Foo & obj){
         std::cout << "COPY CONSTRUCTOR\n";
         std::cout << "OBJECT " << this <<std::endl;
    }
    ~Foo(){std::cout << "DESTRUCTOR\n";}
};
 
 
void baz(Foo foo) {/* some code */}
 
int main()
{
    Foo foo(4); //OK
    Foo foo1 = foo; //error
    return 0;
}
Добавлено через 1 час 7 минут
Я имел ввиду что Foo foo1 = foo равносильно foo1(foo), что в первом что во втором случае в конструктор explicit Foo(Foo & obj) передается переменная foo ,тогда зачем в первом варианте это запрещать если это ничего не сделает?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.09.2019, 14:54
Ответы с готовыми решениями:

неоднозначность, explicit
Добрый вечер. написал такой шаблонный класс: template &lt;class T&gt; class Container { private: ...... public: ...

inline explicit
Почему ошибка? #include &lt;iostream&gt; class A { int i; public: explicit A(int x = 0); void show() {std::cout &lt;&lt;...

Explicit в конструкторе
Ключевое слово explicit перед конструктором служит лишь для того чтобы не запутаться и передавать аргумент в конструктор явно? Например: ...

20
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
13.09.2019, 13:08  [ТС]
Студворк — интернет-сервис помощи студентам
hoggy,
Цитата Сообщение от hoggy Посмотреть сообщение
поскольку в правой части: Foo foo1 = foo;
нет никакого приведения типов.
а значит конструкция полностью идентична Foo foo1(foo);
так а если бы было
C++
1
Foo foo; Foo1 foo1 = foo;
то что-то поменялось бы кроме того что тут ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2019, 13:08

explicit и последствия.
Здравствуйте. Как я узнал, в С++ есть ключевое слово explicit, применяемое к конструкторам с одним параметром ( или, как я понял, большим...

Что такое explicit?
Читал много определений, но не понимаю вообще, что оно такое. Одно из: &quot;Ключевое слово explicit используется для создания явных...

Целевой explicit конструктор
Добрый день. Есть код struct Foo { explicit Foo() { }

Когда писать explicit
Зачем нужен explicit разобрался. Но, возник вопрос: зачем его писать? когда Вы его пишете? вроде я как-то обходился без него

Explicit и его назначение
Собственно, полазив по гуглу и по учебнику так и не понял всей сущности explicit. Как я понял: class lessons { int intVar; ...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru