gpt4 book ai didi

c++ - 当用字符串文字实例化时,模板 T & 参数到底是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:40 24 4
gpt4 key购买 nike

很抱歉问了一个我认为我知道答案的问题,但对我来说这似乎很奇怪,不可能是正确的。

如果我有一个模板函数

template<typename T>
int TemplatedSize(T &ref){
return sizeof(ref);
}

然后我用这样的字符串文字实例化它:

int i = TemplatedSize("oh how I love C++ sometimes");

我通过模板实例化得到的是一个函数,它引用了一个长度为 28 的 const char 数组?我查阅了它的语法,我必须说我以前从未在代码中见过它。这等同于什么被实例化了吗?

int NonTemplatedSize(const char (&arrayRef)[28]){
return sizeof(arrayRef);
}

如果那是正确的,如果我的函数体中不仅仅是一个 sizeof 并使用许多不同大小的字符串文字调用函数,我将不得不担心代码膨胀?

最佳答案

是的,这是正确的类型,是的,您将为传递给它的每个字符串文字长度获得一个新实例。为了帮助最大程度地减少膨胀,您可以使这些函数内联,可能会将 char * 和大小传递给另一个非模板函数。

int doSomeCalculation(const char *s,size_t n);

template <size_t n>
inline int doSomeCalculation(const char (&s)[n])
{
return doSomeCalculation(s,n);
}

关于c++ - 当用字符串文字实例化时,模板 T & 参数到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com