我想在c ++中做这样的事情:
for (int i = 0, i < 3; ++i)
{
const auto& author = {"pierre", "paul", "jean"}[i];
const auto& age = {12, 45, 43}[i];
const auto& object = {o1, o2, o3}[i];
print({"even", "without", "identifier"}[i]);
...
}
每个人都知道如何做这种伎俩吗?我在python中做了很多。 它帮助我很好地分解代码。
答案 0 :(得分:2)
看起来您应该使用自定义类的向量包含author
,age
,object
和whatever
属性,将其放在向量中并为-loop over it - 这在C ++中是惯用的:
struct foo
{
std::string author;
int age;
object_t object;
whatever_t whatever;
};
std::vector<foo> foos = { /* contents */ };
for(auto const& foo : foos)
{
// do stuff
}
如果你真的想,你可以这样做:
const auto author = std::vector<std::string>{"pierre", "paul", "jean"}[i];
// ^ not a reference
但我不确定这将如何优化。您也可以在循环之前声明这些向量并保留引用。
答案 1 :(得分:1)
创建像{"pierre", "paul", "jean"}
这样的对象会产生初始化列表。初始化列表没有任何[]运算符Why doesn't `std::initializer_list` provide a subscript operator?。所以你应该转换为const auto& author = (std::vector<std::string>{"pierre", "paul", "jean"})[i];
。此外,参考符号不应该存在,因为您正在创建临时对象,并且您正在存储对临时对象的引用。