在c ++中直接访问的内联数组声明

时间:2017-08-12 20:53:50

标签: c++ arrays inline

我想在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中做了很多。 它帮助我很好地分解代码。

2 个答案:

答案 0 :(得分:2)

看起来您应该使用自定义类的向量包含authorageobjectwhatever属性,将其放在向量中并为-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];。此外,参考符号不应该存在,因为您正在创建临时对象,并且您正在存储对临时对象的引用。