explicit

2 отговора 236 прегледа
#1

explicit

Моля някой да ми обясни какво е действието тази ключова дума в C++.
Четох по книгите, но не го разбрах.

Отговор
в отговор на Учeниk #2

Re: explicit

Ако имаш:
class A {
...
explicit A(int val);
...
};

не можеш да напишеш:

A a = 1;

А трябва да напишеш:

А а(1).

Смисъла е че не можеш да имаш неявни преобразувания, примерно
void f(A a), не можеш да извикаш f(1), което може да стане ако конструктора не е explicit.

Отговор
в отговор на Учeниk #3

Re: explicit

Ключовата дума се ползва за конструктори с един неподразбиращ се аргумент. Целта е да се избегне неволно конструиране на обекти, когато не това е целта. Имплицитните конструктори с аргумент указател, bool, цяло число са много опасни, заради някои неявни конверсии между тях.

Скоро тук се бистреше една грешка, която не би се случила ако беше ползван експлицитен конструктор. Разгледай примера и обърни внимание как при подаване на указател се извършва неявна конверсия до bool, а от там се конструира нов обект, което не е целта. В случай на използване на 'explicit' това неявно конструиране на обект няма да се случи, а ще даде грешка за несъвместимост на типовете.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_

Редактирано от Colombino на

Отговор