在C ++中使用的奇怪声明

时间:2014-04-25 14:21:25

标签: c++ c++11

stackoverflow 上一个问题的一段代码中,我看到了这个,对我来说很奇怪,using声明:

template <std::size_t SIZE> 
class A
{
public:
  ...
  using const_buffer_t = const char(&)[SIZE];
  ...
};

有人可以提出以下问题:

  1. 它代表什么类型?
  2. 我们在哪里需要这种声明?

2 个答案:

答案 0 :(得分:18)

那是type alias,这是自c ++ 11以来可用的新语法。

你实际做的是 typedefing 数组的类型

const_buffer_t 

将是一个长度为= SIZE

的const char数组

答案 1 :(得分:14)

using声明是C ++ 11中引入的新语法;它引入了类型别名,指定const_buffer_t现在是类型const char(&)[SIZE]的别名。在这方面,using的使用与typedef基本相同(尽管using类型别名为more flexible)。

至于我们所讨论的实际类型(const char(&)[SIZE]),它是对大小为SIZE的数组的引用;对数组的引用很少使用,但可以使用它们:

  • 如果在某个函数中你想强制接收对特定大小的数组而不是泛型指针的引用,你可以用数组引用来做到这一点(注意即使你在函数声明中写int param[5]它被解析为int *);
  • 同样适用于对数组的引用(明确记录您正在返回对特定大小的数组的引用);
  • 更重要的是,如果你想动态分配&#34; true&#34;多维数组(与指向一维数组的指针数组或&#34;平面数组&#34;与&#34;手动2d寻址&#34;)you have to use them相反。

另请参阅array FAQ,其中详细解释了这些内容。