-Woverloaded-virtual с оператором мелкого копирования по умолчаниюC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 -Woverloaded-virtual с оператором мелкого копирования по умолчанию

Сообщение Anonymous »


Это предупреждение выдается компилятором G++, начиная с GCC-13.
[*]
Clang++ 17 доволен этим кодом.
[*]
MSCV 19 выдает аналогичное предупреждение
(39): предупреждение C4263: 'Derived &Derived::operator =(const Derived &)': функция-член не переопределяет какую-либо функцию виртуального члена базового класса (46): предупреждение C4264: 'const Parent &Parent::operator =(int &)': для виртуальной функции-члена из базового 'Parent' недоступно переопределение; функция скрыта (10): примечание: см. объявление «Parent::operator =» (5): примечание: см. декларацию «Родителя». Почему мне нужно реализовать оператор присваивания в производном классе, а не наследовать от родительского класса?
Скрытие оператора тоже не помогает.

На мой взгляд, это выглядит как недостаток стандарта C++.
#include использование пространства имен std; структура Родитель { Родитель() = по умолчанию; виртуальный ~Parent() = по умолчанию; виртуальный константный родитель и оператор = (int &x) { х = 0; вернуть *это; } }; Производное структуры: публичный родительский элемент { Производное() = по умолчанию; виртуальный ~Derived() = по умолчанию; #если правда) /* Установите значение false, чтобы избавиться от следующего предупреждения g++ -o Woverloaded-virtual-test -Wall -Wextra Woverloaded-virtual-test.cpp или clang++ -o Woverloaded-virtual-test -Wall -Wextra Woverloaded-virtual-test.cpp main.cpp:18:28: предупреждение: «virtual const Parent& Parent::operator=(int&)» скрыто [-Woverloaded-virtual=] 18 | виртуальный константный родитель и оператор = (int &x) | ^~~~~~~~ main.cpp:48:24: примечание: by ‘constexpr Derived& Derived::operator=(const Derived&)’ 48 | constexpr Derived& оператор=(const Derived&) = delete; | ^~~~~~~~ */ #еще виртуальный константный родитель и оператор = (int &x) { вернуть Parent::operator=(x); } #endif constexpr Derived& оператор=(const Derived&) = delete; недействительный метод (int &x) { х *= 2; возвращаться; } }; интервал основной() { cout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»