Передача параметров для аргумента, когда C ++ 17 включено, изменяется в соответствии с C ++ 14C++

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

Сообщение Anonymous »

У меня есть минимальный воспроизводимый пример для проблемы здесь. < /p>
Он генерирует следующее примечание на 64-битной GCC 11.2. < /p>

Код: Выделить всё

: In function 'void a(Color)':
:19:6: note: parameter passing for argument of type 'Color' when C++17 is enabled changed to match C++14 in GCC 10.1
19 | void a(Color c) {
|      ^
Compiler returned: 0
может кто -то объяснить причину и почему вам нужно :

[*] Унаследовать базовый класс
Используйте по умолчанию конструктор копии. Взволнован, я должен быть об этом?#include

class C {};

// Must inherit to produce the note mentioned below.
class Color : C {
public:
double x={1.0}, y={2.0}, z={3.0};
Color() = default;

// Copy constructor.
// Default - gives note: parameter passing for argument of type 'rgb_color' when C++17 is enabled changed to match C++14 in GCC 10.1 warning.
Color(const Color& other) = default;

// Explicit - does NOT give the note
//Color(const Color& other): C(other),x(other.x),y(other.y),z(other.z){}
};

void a(Color c) {
std::cout
Редактировать: этот вопрос входит в специфики относительно влияния наследования и копирования конструктора на сгенерированную компилятор. Пожалуйста, прочитайте подробно перед маркировкой как дубликат.

Подробнее здесь: https://stackoverflow.com/questions/777 ... -match-c14
Ответить

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

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

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

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

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