explicit
2 отговора
236 прегледа
explicit
Моля някой да ми обясни какво е действието тази ключова дума в C++.
Четох по книгите, но не го разбрах.
Четох по книгите, но не го разбрах.
Re: explicit
Ако имаш:
class A {
...
explicit A(int val);
...
};
не можеш да напишеш:
A a = 1;
А трябва да напишеш:
А а(1).
Смисъла е че не можеш да имаш неявни преобразувания, примерно
void f(A a), не можеш да извикаш f(1), което може да стане ако конструктора не е explicit.
class A {
...
explicit A(int val);
...
};
не можеш да напишеш:
A a = 1;
А трябва да напишеш:
А а(1).
Смисъла е че не можеш да имаш неявни преобразувания, примерно
void f(A a), не можеш да извикаш f(1), което може да стане ако конструктора не е explicit.
Re: explicit
Ключовата дума се ползва за конструктори с един неподразбиращ се аргумент. Целта е да се избегне неволно конструиране на обекти, когато не това е целта. Имплицитните конструктори с аргумент указател, bool, цяло число са много опасни, заради някои неявни конверсии между тях.
Скоро тук се бистреше една грешка, която не би се случила ако беше ползван експлицитен конструктор. Разгледай примера и обърни внимание как при подаване на указател се извършва неявна конверсия до bool, а от там се конструира нов обект, което не е целта. В случай на използване на 'explicit' това неявно конструиране на обект няма да се случи, а ще даде грешка за несъвместимост на типовете.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Скоро тук се бистреше една грешка, която не би се случила ако беше ползван експлицитен конструктор. Разгледай примера и обърни внимание как при подаване на указател се извършва неявна конверсия до bool, а от там се конструира нов обект, което не е целта. В случай на използване на 'explicit' това неявно конструиране на обект няма да се случи, а ще даде грешка за несъвместимост на типовете.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Редактирано от Colombino на