从整型模板推断c++数组大小

C++ array size inferring from integer template

本文关键字:c++ 数组 整型      更新时间:2023-10-16

我遇到了模板版本_snwprintf_s

从MSDN:

template <size_t size>
int _snwprintf_s(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format [,
   argument] ... 
); // C++ only

我知道如何使用它,我熟悉c++模板和使用整数模板的可能性。

wchar_t (&buffer)[size]的类型是什么?它是对wchar_t的引用吗?如果是,那么[size]是什么意思?这叫什么?

我猜编译器以某种方式推断出大小,但这是我第一次遇到这样的语法,并感谢一个解释,因为我自己没有找到任何东西(可能因为我不知道要搜索什么)。

另外,如果你能解释一下这是如何在幕后工作的,那就太好了。

编辑:

我更感兴趣的是它是如何在编译器方面工作的,而不是传递的类型,这是在这里提到的解释

谢谢

wchar_t (&buffer)[size]是对数组的引用,就像你在普通C中写的那样,wchar_t (*buffer)[size]是指向数组的指针。

你可以把引用想象成"常量-自动解引用-指针",99%的情况下它们都是这样实现的。

关键是c++编译器只能在编译时推断出实参的类型并调用正确的模板函数。

因此,L"hi"将被推导为wchar_t[3],并调用_snwprintf_s<3>

这当然不适用于像wchar_t t* = malloc(3*sizeof(wchar_t));这样的东西,因为它是在运行时全部涂覆的,t的类型是wchar_t*

buffer是对类型为wchar_t[size]的对象的引用,即对大小为size的数组wchar_t的引用。

这与创建参数wchar_t buffer[]非常相似,但有一些优点:例如,它允许您在这里执行模板参数推导,并且我也看到优化器在以这种方式传递数组的某些情况下执行得更好。