很抱歉提出一个我认为我知道答案的问题,但这对我来说似乎很奇怪,这是不正确的。
如果我有模板化功能
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并且调用了许多不同大小的字符串文字,那么我将不得不担心代码膨胀?
答案 0 :(得分:0)
是的,这是正确的类型,是的,您将为传递给它的每个字符串文字长度获得一个新实例。为了帮助减少膨胀,您可以将这些函数内联,可能将char *
和大小传递给另一个非模板函数。
int doSomeCalculation(const char *s,size_t n);
template <size_t n>
inline int doSomeCalculation(const char (&s)[n])
{
return doSomeCalculation(s,n);
}