Обрабатывается ли вложенный класс / структура таким же образом при передаче? Если класс передается по ссылке const, является ли вложенный класс таким же образом?

#c #class #struct #copy-constructor

#c #class #struct #copy-constructor

Вопрос:

Предположим, вы создаете класс

 class X {
private:
    int x;
    myStruct foo; // myStruct is a struct
public:
    X(); // Constructor
    X(int, myStruct); // Parameterized Constructor
    X(const Xamp; other); // Copy Constructor
    void example(const Xamp; a); // Function that passes class X by const reference
    void example2(X a); // Function that passes class X by value

};
 

Как обрабатывается элемент данных структуры, когда объект передается по ссылке? Например, при example(const Xamp; a) вызове вызывается ли здесь конструктор копирования структуры? Как обрабатывается элемент данных структуры? Если вы вызвали example2(X a); , создается ли новая структура вместе с классом a?

Комментарии:

1. Кстати, глядя на ваш вопрос, кажется, вы можете думать, что class и struct разные вещи. Это совсем не так, единственное отличие — спецификаторы доступа по умолчанию для членов.

2. Я отредактировал вопрос, чтобы он был более понятным. Другие вопросы не отвечают на суть моего вопроса

3. Да, я это понимаю. Я сделал различия, потому что структуры обычно не имеют методов. Я также немного обновил вопрос @cigien

4. Хорошо, я снова открылся. Могу я спросить, почему вы думаете, что использование ссылки на объект приведет к созданию копий его членов?

5. Спасибо. Я не обязательно так думаю. Насколько я понимаю, когда объект передается без ссылки const, например, example2(X a), создается новый экземпляр типа X, и любой объект, который вы передали в него, копируется, что может быть дорогостоящим. Наличие параметров в качестве ссылки const решает эту проблему. Но если вы передаете объект с помощью const ref , например, example(const Xamp; a) , является ли конструктор копирования для вложенного класса / структуры, в приведенном мной примере вызывается конструктор копирования MyStruct? Мое замешательство заключается в том, как обрабатывается вложенный класс при его передаче. Еще раз спасибо @cigien