с ++ назначить значение int для структуры?вопрос о перегрузке конструктора и оператора - PullRequest
0 голосов
/ 23 октября 2018

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

TestStruct ts = TestStruct(3004);

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

Мой вопрос:

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

--- update: теперь я знаю, что используемый здесь метод называется конструктором преобразования.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;
}

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

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

struct SS {                                 
    int si;                                 
};                                          

struct TestStruct {                         
    SS  ss;                                 
};                                          

int main()                                  
{                                           
    TestStruct ts = TestStruct{3004};       
}       
0 голосов
/ 23 октября 2018

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

Вы предоставляете конструктор для struct, который принимает int:

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

Таким образом, литерал int в

TestStruct ts = TestStruct(3004);

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

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