现代C ++是否会支持C#“对象初始化器”语法?

时间:2018-07-16 16:45:31

标签: c++ c++20

我很好奇,如果现代的c ++标准人们已经考虑或添加了C#的“对象初始化器”语法。例如,在C#中,我可以在初始化期间像这样初始化对象的成员:

StudentName student2 = new StudentName
{
    FirstName = "Craig",
    LastName  = "Playstead"
};

public class StudentName {
    public string FirstName;
    public string LastName;
};

如果人们计划将标准的“对象初始化器”语法添加到现代C ++中,它将非常方便。 C ++ 11,C ++ 14,C ++ 17,C ++ 20等...

它当前是否存在于现代C ++规范中?

1 个答案:

答案 0 :(得分:4)

看看designated initializers。自C99以来,它们就一直使用C语言,但并未添加到C ++中。现在计划将它们添加到C ++ 20中,但有一些限制。示例:

struct db_config
{
    std::string host = "localhost";
    std::string port = "5432";
    std::string dbname;
    std::string user;
    std::string password;
} config = {
    .dbname = "test",
    .user = "admin",
    .password = "v3ry$3cur3"
};

但是,某些编译器(例如GCC)已经允许在C ++代码中使用C指定的初始化程序作为扩展。