Здравствуйте, Коллеги.
Не получу ли UB?
enum E;
struct A
{
A(E e);
A(bool isSome);
};
Здравствуйте, Alexander Pazdnikov, Вы писали:
AP>Здравствуйте, Коллеги.
AP>Не получу ли UB?
AP>AP>enum E;
AP>struct A
AP>{
AP> A(E e);
AP> A(bool isSome);
AP>};
AP>
Нет, с какой стати? типы то разные.
Все ниже перечисленное проглатывается и разруливается
enum E {};
struct B {};
struct C {};
struct A
{
void func(B * ptr);
void func(C * ptr);
void func(B ptr);
void func(C ptr);
void func(E e);
void func(bool isSome);
};
Если компилятор запутается какую функцию вызвать под тот или иной передаваемый аргумент он заругается ещё на этапе сборки.
Здравствуйте, Alexander Pazdnikov.
С таким подходом можно получить плохо предсказуемое поведение:
enum my_enum
{
some_value
};
struct my_struct
{
my_struct(my_enum E) {} // ctor 1
my_struct(bool B) {} // ctor 2
};
int main()
{
my_struct Ms1(some_value); // Будет вызван ctor 1
my_struct Ms2(false); // Будет вызван ctor 2
my_struct Ms3(0); // Какой конструктор будет вызван ?
return 0;
}
Обсуждалось
здесьАвтор: Ytz
Дата: 08.04.11
.
Суть вкратце — при выборе перегруженной функции компилятор отдаст предпочтение
функции, использующей встроенный тип (bool в данном случае), чем определенный пользователем.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Alexander Pazdnikov.
O>С таким подходом можно получить плохо предсказуемое поведение:
O>O>enum my_enum
O>{
O> some_value
O>};
O>struct my_struct
O>{
O> my_struct(my_enum E) {} // ctor 1
O> my_struct(bool B) {} // ctor 2
O>};
O>int main()
O>{
O> my_struct Ms1(some_value); // Будет вызван ctor 1
O> my_struct Ms2(false); // Будет вызван ctor 2
O> my_struct Ms3(0); // Какой конструктор будет вызван ?
O> return 0;
O>}
O>
Ну тут ты сам себе злобный Буратино.
Здравствуйте, okman, Вы писали:
O>Обсуждалось здесьАвтор: Ytz
Дата: 08.04.11
.
O>Суть вкратце — при выборе перегруженной функции компилятор отдаст предпочтение
O>функции, использующей встроенный тип (bool в данном случае), чем определенный пользователем.
В данном случае компилятору не из чего выбирать — стандартного преобразования int -> enum не существует, так что остается единственный вариант с bool.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, okman, Вы писали:
O>>Обсуждалось здесьАвтор: Ytz
Дата: 08.04.11
.
O>>Суть вкратце — при выборе перегруженной функции компилятор отдаст предпочтение
O>>функции, использующей встроенный тип (bool в данном случае), чем определенный пользователем.
B>В данном случае компилятору не из чего выбирать — стандартного преобразования int -> enum не существует, так что остается единственный вариант с bool.
Это лишь частный случай.
Возможны неявные преобразования с другими типами, что в конечном счете где-то да выстрелит.