У меня есть вопрос в моем проекте, когда я понимаю код других людей, я нахожу странный способ, который присваивает значение int структуре:
TestStruct ts = TestStruct(3004);
В Teststruct есть еще одна подсистема SS. У SS есть только один член типа int. (оригинальный код, конечно, не похож на приведенный ниже).
Я пытаюсь понять это в против кода на платформе Windows.
Код ниже похож на код моего проекта
Мой вопрос:
—Обновление: теперь я знаю, как используется здесь называется преобразование
конструктор. int -> struct -> int, это правильно?
.
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;
}
как это возможно? присваивать значение типа int структуре
Вы предоставляете конструктор для вашего struct
это занимает int
:
struct SS {
int si;
SS(int si) : si{ si } {}
};
Итак int
буквально в
TestStruct ts = TestStruct(3004);
может быть преобразован в SS
который передается вашему
TestStruct(const SS ss_) : ss(ss_) {}
Для полноты, если бы «структуры» были агрегатами, вы могли бы просто использовать инициализацию фигурной скобки:
struct SS {
int si;
};
struct TestStruct {
SS ss;
};
int main()
{
TestStruct ts = TestStruct{3004};
}