c++ - 为什么我不会在C++中为此结构使用构造函数?

标签 c++

我的教授正在用一个没有构造函数的结构列表来构建一个类(class)学生。但是无论出于什么原因,都说不需要构造函数,那为什么呢?我已经给他发了电子邮件,但没有任何回应,所以我想知道是否有人可以告诉我为什么它不需要构造函数。这是结构和类

struct Record
{
    string class_name;
    char grade;
};
class Student
{

public:
    Student(string &name);
    void printRecords();
    char gradeForClass(string &cl_name);
    string standing();
    void addClass(string&, char);

private:
    int numClassesTaken;
    string st_name;
    std::list<Records> st_records;
};

最佳答案

如果您在谈论Record,那么他/她是对的,您可以初始化Record对象而无需为其编写构造函数。 Record是一个聚合,这意味着您可以使用aggregate initialization:

Record r{"some class name", 'A'};

这种方法虽然存在一些问题。由于一些复杂的规则,因此:
Record r;

会将r.grade字段保留为未初始化状态。您需要改用以下方法:
Record r{};

另一种选择是对grade进行默认初始化
struct Record
{
    string class_name;
    char grade{}
    // or
    // char grade = 'S';
};

关于c++ - 为什么我不会在C++中为此结构使用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61470379/

相关文章:

c++ - XCode3 - 库搜索路径和项目框架之间的关系

C++ 将 float 转换为字符串

c++ - "5"有什么问题?纸上的一切都很好

c++ - CRTP:具有基于派生参数的函数

c++ - 在不使用全局变量的情况下从主范围更改函数中的局部变量

c++ - C++ 中可变数量的变量

c++ - SFML VertexArray 不是 sf 的成员

c++ - 如何在Windows上为g++安装pthreads.h?

c++ - 使用 scanf() 进行动态分配

c++ - 在查找 namespace 名称期间可以考虑哪些其他名称,而不是 namespace 名称?