C++ 构造函数模板

C++ 构造函数模板,c++,c++11,C++,C++11,我看到一个类的构造函数非常奇怪: class HashTable { public: template <int N> HashTable(const char(&str)[N]) { } }; 类哈希表 { 公众: 模板 哈希表(常量字符(&str)[N]) { } }; 你能不能解释一下,举个例子,或者给我一个相关的链接? 我真的不明白const char(&str)[N]这是一种捕获数组参数大小的方法。数组有一种类型的T[N],通常

我看到一个类的构造函数非常奇怪:

class HashTable
{
public:
    template <int N>
    HashTable(const char(&str)[N])

    {
    }
};
类哈希表
{
公众:
模板
哈希表(常量字符(&str)[N])
{
}
};
你能不能解释一下,举个例子,或者给我一个相关的链接?
我真的不明白
const char(&str)[N]

这是一种捕获数组参数大小的方法。数组有一种类型的
T[N]
,通常可以衰减为
T*

#include <iostream>

template <int N>
void foo(const char(&str)[N]){
    for(int i=0;i<N;++i)
        std::cout<<str<<' ';
}

void foo(const char* str){
    //for(int i=0;i<??;++i)
}

void bar(const char* str, int n){
    for(int i=0;i<n;++i)
        std::cout<<str<<' ';
}
int main(){
    const char str[] =  "Hello";//type is const char[6]
    const char* str2 = str; //Decay
    // const char str3[] = str; (6)
    int n = sizeof(str)/sizeof(str[0]);
    foo(str);// (1) Calls foo<6>
    foo(str2);// (2) Must call foo(const char*) which is useless
    bar(str, n); // (3) Array can decay
    bar(str2, n); // (4) Same as (3) - bar can be used with all arrays
    bar(str2, 10); // (5) Buffer overrun
}
#包括
模板
void foo(常量字符(&str)[N]){

对于(int i=0;i)您不了解哪部分?您了解模板吗?您知道什么
const char(&str)[N]
是吗?请尽量说得更具体一些老实说,每次遇到一段你不理解的代码作为第一个goto解决方案时,写一个问题不是一个好策略。也许看看这里,没有找到一个好的副本,但这是非常相关的:如果你浏览答案,你也会找到一个解释模板技巧的答案获取在const char(& STR)[n]中想要知道的数组大小。不能理解这个小代码,也许值得注意的是,在char *的情况下,正确的C++方式是使用STD::String。