с ++ присвоить значение int для структуры? вопрос о перегрузке конструктора и оператора

У меня есть вопрос в моем проекте, когда я понимаю код других людей, я нахожу странный способ, который присваивает значение int структуре:

TestStruct ts = TestStruct(3004);

В Teststruct есть еще одна подсистема SS. У SS есть только один член типа int. (оригинальный код, конечно, не похож на приведенный ниже).
Я пытаюсь понять это в против кода на платформе Windows.
Код ниже похож на код моего проекта

Мой вопрос:

  1. Как это возможно? Назначение значения int для структуры (это уже работает в моем проекте из кода другого коллеги).

—Обновление: теперь я знаю, как используется здесь называется преобразование
конструктор. int -> struct -> int, это правильно?

  1. Как понять перегрузку конструктора и оператора перегрузки? Я смущен следующим &, && и вещь по умолчанию … (в исходном коде каждая структура имеет следующий подобный код 🙂

.

TestStruct() = default;
TestStruct(const TestStruct&) = default;
TestStruct& operator=(const TestStruct&) = default;
TestStruct(TestStruct&&) = default;
TestStruct& operator=(TestStruct&&) = default;

тестовый код выглядит следующим образом:

// 03_2 struct constructor.cpp
#include <iostream>
using namespace std;

typedef struct subStruct {
int si;
subStruct(const int si_) : si(si_){   //compile error if no this constructor
}
}SS;

struct TestStruct {
SS  ss;

//constructor and operator overload
TestStruct(const SS ss_)  : ss(ss_) {

}

TestStruct() = default;
TestStruct(const TestStruct&) = default;
TestStruct& operator=(const TestStruct&) = default;
TestStruct(TestStruct&&) = default;
TestStruct& operator=(TestStruct&&) = default;
};

int main(int argc, char const *argv[])
{
TestStruct ts = TestStruct(3004);

return 0;
}

2

Решение

как это возможно? присваивать значение типа int структуре

Вы предоставляете конструктор для вашего struct это занимает int:

struct SS {
int si;
SS(int si) : si{ si } {}
};

Итак int буквально в

TestStruct ts = TestStruct(3004);

может быть преобразован в SS который передается вашему

TestStruct(const SS ss_) : ss(ss_) {}
3

Другие решения

Для полноты, если бы «структуры» были агрегатами, вы могли бы просто использовать инициализацию фигурной скобки:

struct SS {
int si;
};

struct TestStruct {
SS  ss;
};

int main()
{
TestStruct ts = TestStruct{3004};
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector