c++ - 在 C++08 中初始化对象以作为参数传递的首选语法是什么?
问题描述
假设我有一个结构,我只是将其用作聚合数据保存设备。例如,下面的结构包含两个整数值。假设我有一个名为 myVec 的这些结构的向量,并且我想使用 push_back 向该向量添加一个新结构。我的理解是,在 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 函数?虽然这是我想要完成的一个示例,但我的项目中将有几个这样的向量,并且结构并不总是简单的整数对。我宁愿避免让几个“临时”虚拟变量作为参数的占位符四处浮动,因为避免让它们四处浮动感觉更干净。下面给出了一个我希望避免但会在必要时使用的示例。该示例将 x 和 y 值均介于 0 和 9 之间的所有坐标的列表添加到向量中。
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 ) );
推荐阅读
- ios - 将框架添加到项目方案而不是 iOS 项目上的目标
- android - 如何在不更新整个 App 的情况下更新片段的内容
- rust - AsRef 的 impl 是如何实现的
为 PathBuf 工作? - javascript - 无法将数据文件发送到后端reactjs
- python - 在python中缩小非常大的If语句
- excel - 具有不同行和列中可用条件的 Excel 条件查找
- javascript - forEach 中的 EventLister 参数需要错误(工具提示)
- actionscript-3 - Animate 2021 动作脚本 3 URLRequest 导致错误 2035
- ios - DispatchQueue 线程并不总是设置正确的结果
- python - 通过 Gunicorn 运行 Flask Restplus API