需要帮助解码此typedef

时间:2018-07-16 09:09:06

标签: c++ arrays c++11 reference typedef

我正在尝试创建对数组的引用。
它是这样工作的:

typedef int array_type[100];

int main() {
    int a[100];
    array_type &e = a;    // This works
}

但是后来我试图删除typedef,并使同一件事起作用。没有成功。

int main() {
    int a[100];
    // int[100] &e = a;    // (1) -> error: brackets are not allowed here; to declare an array, place the brackets after the name
    // int &e[100] = a;    // (2) -> error: 'e' declared as array of references of type 'int &'
}

我对typedef的解释有什么问题?而我该如何删除typedef,并仍然获得相同的功能。

2 个答案:

答案 0 :(得分:12)

您需要添加括号以告诉您这是对数组的引用,而不是某物的数组。例如

int (&e)[100] = a;

或者使用autodecltype(自C ++ 11起)使其更简单。

auto& e = a;
decltype(a)& e = a;

答案 1 :(得分:0)

如果要避免这种混乱,实际上是转换为模板类型的好机会,因为这里有std::array。除其他外,它们提供了某种程度地统一您需要使用的语法的方法,并且在本示例中,消除了对reference / arrays / ...的困惑。

int main() 
{
    std::array<int, 100> a;
    std::array<int, 100>& e = a;
}

没有什么可以阻止您提供类型别名:

using array_type = std::array<int, 100>;