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

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

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

有人可以解决以下问题吗?

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

  • 这是一个类型别名,它是自c ++ 11以来可用的新语法。

    你实际上在做什么是typedefing数组的类型

    const_buffer_t 
    

    将是长度= SIZE的const char数组


    using声明是C ++ 11中引入的新语法; 它引入了一个类型别名,指定const_buffer_t现在是类型为const char(&)[SIZE]的别名。 在这方面,这种使用的using是基本相同typedef (虽然using类型别名更加灵活)。

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

  • 如果在一些函数中你想强制接收一个特定大小的数组而不是泛型指针,那么你可以用数组引用来做到这一点(注意,即使你在函数声明中编写了int param[5] ,它也被解析为int * );
  • 这同样适用于returing对数组的引用(明确记录您正在返回对特定大小数组的引用);
  • 更重要的是,如果你想分配动态的“真正的”多维数组(相对于指向单维数组的指针数组或者“带有”手动二维寻址“的”平坦数组“),你必须使用它们。
  • 另请参阅数组FAQ,其中大部分内容将详细解释。

    链接地址: http://www.djcxy.com/p/78647.html

    上一篇: Strange declaration with using in C++

    下一篇: C++ 'typedef' vs. 'using ... = ...'