Конструктор для преобразования в Dev-cpp и Ms Visual C++

  • Автор темы Автор темы Normann
  • Дата начала Дата начала
N

Normann

Код:
class MyClass
{
...
MyClass();
MyClass(MyClass&);
MyClass(int);
...
};

void OnButton1(void)
{
MyClass obj1 = 9;
};

В MS Visual C++ компилируется и выполняется без ошибок и предупреждений, а в Dev-Cpp выводит вот такую ошибку:
In function `void OnButton1()':
no matching function for call to `MyClass::MyClass(MyClass)'
candidates are: MyClass::MyClass(int)
MyClass::MyClass(MyClass&)
initializing temporary from result of `MyClass::MyClass(int)'
[Build Error] [ButtonsClick.o] Error 1

Почему? Исправно ли это?
 
Да, но почему такая разница, и какой компилятор скомпилировал правельнее?

Еще интересно то что obj1 = 9 в Dev-Cpp интерпретировался без проблем.
 
Есть такое правило, что если переопределен копирующий конструктор, то необходимо реализовывать и оператор присваивания.

Фича в том что ваш констуктор копирования принимает неконстантную ссылку. Вот вам цитата из стандарта:

Note: if a class X only has a copy constructor with a parameter of type X&, an initializer of type const X or volatile X cannot initialize an object of type (possibily cv-qualified) X. Example:
struct X {
X(); //default constructor
X(X&); //copy constructor with a nonconst parameter
};

const X cx;
X x = cx; // error – X::X(X&) cannot copy cx into x
 
Параметр конструктора копирования сделал константным, заработало без проблем. Но блин, не могу врубиться как конструктор копирования и конструктор для преобразования (int) конфликтуют между собой когда объект инициализируется int типом.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab