【问题标题】:Will modern C++ ever support C# "Object Initalizer" Syntax? [closed]现代 C++ 会支持 C#“对象初始化器”语法吗? [关闭]
【发布时间】:2018-12-24 06:45:30
【问题描述】:

我很好奇现代 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++ 规范中?

【问题讨论】:

  • this answer 说有一个 C++20 提案用于 C 风格的指定初始化器,但它与 C# 不同
  • 这不是有效的 Java。
  • 这有什么比使用构造函数更好的方法:new StudentName( "Craig", "Playstead" )
  • @NeilButterworth 我认为您的示例已经展示了这一点。在一个类只是一个变量包的情况下,特别是如果它们具有通用类型,为它们命名是很好的。你怎么知道它不是 new StudentName("Playstead", "Craig")
  • @NeilButterworth 我的意思是当类型检查不能帮助您防止参数排序错误时,为它们命名很好。

标签: c++ c++20


【解决方案1】:

看看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 指定的初始值设定项作为扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2013-07-06
    • 2015-12-03
    相关资源
    最近更新 更多