c++ - 在 C++08 中初始化对象以作为参数传递的首选语法是什么?

标签 c++

假设我有一个结构,我只是将其用作聚合数据保存设备。例如,下面的结构包含两个整数值。假设我有一个名为 myVec 的结构 vector ,我想使用 push_back 向该 vector 添加一个新结构。我的理解是,在 C++11 及之后的版本中,无需创建命名变量并将该变量作为参数传递即可实现此目的,而是可以执行以下操作。

struct coordinate {
    int y;
    int x;
};
//assume an initialized vector<coordinate> myVec 
//and two ints newY, newX not known at compile time
myVec.push_back( {newY,newX});

基于 https://en.cppreference.com/w/cpp/language/aggregate_initialization 的备注部分, 这似乎是在构造函数初始化列表中使用聚合初始化的示例,但我对此可能是错误的。该来源表明此语法在 C++11 之前不起作用,虽然它适用于 MSVS2017,但它不适用于 Python 的 Visiual C++,这正是我的目标。是否有一种 C++11 之前的语法允许我在不首先创建命名结构变量并将该命名变量传递给 push_back 函数的情况下向 vector 添加另一个结构?虽然这是我试图完成的单个示例,但我的项目中将有几个这样的 vector ,并且结构不会总是简单的整数对。我宁愿避免让几个“临时”虚拟变量作为参数的占位符四处 float ,因为避免让它们四处 float 感觉更干净。下面给出了一个我希望避免但在必要时会使用的例子。该示例将 x 和 y 值都介于 0 和 9 之间(含 0 和 9)的所有坐标的列表添加到 vector 中。

coordinate temp = {0,0};
for (int r = 0; r < 10; ++r){
    for (int c = 0; c < 10; ++c){
        temp.y = r;
        temp.x = c;
        myVec.push_back(temp);
    }
}

最佳答案

只需给你的结构一个构造函数:

  struct coordinate {
        int x, y;
        coordinate( int ax, int ay ) : x(ax), y(ay) {}
  };

然后你可以这样说:

 myVec.push_back( coordinate( 12, 42 ) );

关于c++ - 在 C++08 中初始化对象以作为参数传递的首选语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51974635/

相关文章:

c++ - 嵌套类中的可变参数模板

c++ - 如何从 C++ <random> 获得一致的行为

c++ - 根据运行时参数调用不同版本的模板函数

c++ - 将 vector 或参数传递给 boost::process (boost::fusion)

c++ - 了解 C++ 内存模型 : Different values on different runs

c++ - 将二进制数据从 Qt/C++ DLL 传递到 Delphi 主机应用程序

c# - 通过 C++ 包装器从 java 调用 c# dll 时出错

c++ - 在函数中使用数组方法

c++ - 如何重载嵌套类的运算符?

C++ PCA - 计算协方差矩阵