我遇到了模板版_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]是什么意思?这叫什么?
我猜测编译器会以某种方式推断出这个大小,但这是我第一次遇到这样的语法并且会理解一个解释,因为我自己也找不到任何东西(可能是因为我不知道该搜索什么。)
另外,如果你可以解释这是如何在场景背后起作用的,那就太棒了。
编辑:
我对编译方式如何工作更感兴趣,而不是传递的类型,如上所述[{3}}
谢谢
答案 0 :(得分:2)
buffer
是对wchar_t[size]
类型对象的引用:即对size
大小为wchar_t
的数组的引用。
这与制作参数wchar_t buffer[]
非常相似,但有一些优点:例如它允许你在这里进行模板参数推导,我也看到优化器在某些情况下以这种方式传递数组时表现更好。
答案 1 :(得分:2)
wchar_t (&buffer)[size]
是对数组的引用,就像在纯C wchar_t (*buffer)[size]
中编写的那样,它是指向数组的指针。
ypu可以将引用视为“常量 - 自动解除引用 - 指针”,并且在99%的时间内它们都是如此实现的。
关键是C ++编译器只能在编译时推断出参数的类型并调用正确的模板函数。
因此,
L"hi"
将被推断为wchar_t[3]
并致电_snwprintf_s<3>
。
这当然不适用于像wchar_t t* = malloc(3*sizeof(wchar_t));
这样的内容,因为它在运行时全部涂层,t
的类型为wchar_t*