C++引用的数组在模板中的巧妙运用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、数组的引用和引用的数组

例如

1.引用的数组

int &array[]

array首先向右结合所以这个相当于 (int&)array[] array是个数组其中的元素是引用。
应该叫引用的数组本质是一个数组。

2.数组的引用

int (&array)[10]

array首先和&结合所以array是引用引用的对象是数组
应该叫作:数组的引用,本质是一个引用。

二、在模板中的运用

class test
{
private:
    /* data */
public:
    template <class T, size_t N, size_t P>
    void str_buffer(const T (&data)[N], const T (&topic)[P])
    {
        cout << "N: " << N << endl;
        cout << "p: " << P << endl;
    }
};

int main()
{
    test ar;
    char p[] = "aaaa";
    ar.str_buffer(p, "bbb");
    getchar();
}

输出

N: 5
p: 4

可见即使没有传入具体的大小也可以利用模板的动态联编的特性推断出传入的数组的具体大小
采用数组的引用const char(&p)[a]会有以下好处
1.整个char数组不会作为指针而是作为数组被引用 因而sizeof可以获得整个数组的长度
2.template会动态编译自动推断a的大小由于已经知道了数组的长度因此该函数可以自动推断出字符串的长度
3.const确保可以引用右值同时不会修改源字符串内容
4.传入NULL会报错避免了char*的缺陷

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++