LINUX.ORG.RU

class A {
public:
A(bool q = false) {}
};

int main(int argc, char *argv[])
{
A* ap;
A a;

a = 0; // <<< here
a = ap; // <<< here
}

anonymous
()
Ответ на: комментарий от anonymous

А что вас смущает собственно?

0 кастится в bool и дает false, A* это указатель, соответственно если не null то true...

А ругается если нет параметра по умолчанию у конструктора потому как в этом случае вместо A a; надо делать A a(false);

imp ★★
()
Ответ на: комментарий от anonymous

Если не хочешь чтобы компилятор так "умничал" пиши перед конструктором explicit

imp ★★
()
Ответ на: комментарий от imp

> Конкретно что непонятно?

Не понятна логика разработчиков C++! С какого хрена A a = 0 понимается как A a(0)???

anonymous
()
Ответ на: комментарий от anonymous

>Не понятна логика разработчиков C++! С какого хрена A a = 0 понимается как A a(0)???

потому что гладиолус^W copy-constructor

imp ★★
()
Ответ на: комментарий от anonymous

>Не понятна логика разработчиков C++! С какого хрена A a = 0 понимается как A a(0)???

логика логикой, но с точки зрения стандарта в выражении A a = 0 оператора присваивания нет. поэтому с точки зрения облегчения жизни следующим поколения программистов рекомендуется инициализацию явно писать в форме A a(0)

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

> Не понятна логика разработчиков C++! С какого хрена A a = 0 понимается как A a(0)???

А как по твоему он должен пониматься? Как ошибка?

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Как присваивание его точно нелогично понимать, потому что тогда нужно было бы сконструировать 2 объекта типа А и потом сделать присвоение.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.