Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从整数模板推断数组大小_C++_Templates - Fatal编程技术网

C++ C++;从整数模板推断数组大小

C++ C++;从整数模板推断数组大小,c++,templates,C++,Templates,我遇到了模板版本\u snwprintf\u s 发件人: 模板 内部打印( wchar_t(&buffer)[大小], 大小不可计数, 常量wchar_t*格式[, 参数]。。。 ); // 仅C++ 我理解如何使用它,而且我熟悉C++模板,也有可能使用带有整数的模板。 什么类型的wchar\u t(&buffer)[size]?它是指wchar\t吗?如果是,那么[size]是什么意思?这叫什么 我猜编译器会以某种方式推断出大小,但这是我第一次遇到这种语法,如果能解释一下,我将不胜感激,因

我遇到了模板版本
\u snwprintf\u s

发件人:

模板
内部打印(
wchar_t(&buffer)[大小],
大小不可计数,
常量wchar_t*格式[,
参数]。。。
); // 仅C++
<>我理解如何使用它,而且我熟悉C++模板,也有可能使用带有整数的模板。 什么类型的
wchar\u t(&buffer)[size]
?它是指wchar\t吗?如果是,那么[size]是什么意思?这叫什么

我猜编译器会以某种方式推断出大小,但这是我第一次遇到这种语法,如果能解释一下,我将不胜感激,因为我自己还没有在上面找到任何东西(可能是因为我不知道搜索什么)

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

编辑:

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


感谢

缓冲区
是对类型为
wchar\u t[size]
的对象的引用:即,对
wchar\u t
的大小数组的引用


这与使用参数
wchar\u t buffer[]
非常相似,但有一些优点:例如,它允许您在此处进行模板参数推断,我还看到优化器在以这种方式传递数组的某些情况下性能更好。

buffer
是对类型为
wchar\u t[size]
的对象的引用:即,对
wchar\u t
的大小为
的数组的引用

这与使用参数wchar\u t buffer[]
非常相似,但也有一些优点:例如,它允许您在此处进行模板参数推断,并且我还看到优化器在以这种方式传递数组时在某些情况下的性能更好。

wchar\u t(&buffer)[size]
是对数组的引用,正如您在普通C
wchar\u t(*buffer)[size]
中编写的一样,它是指向数组的指针

ypu可以将引用视为“常量-自动取消引用-指针”,并且在99%的情况下它们都是这样实现的

P> > C++编译器可以在编译时只推导参数的类型并调用正确的模板函数。 因此,,
L“hi”
将被推断为
wchar\u t[3]
并调用
\u snwprintf\u s

这当然不适用于
wchar\u t*=malloc(3*sizeof(wchar\u t))
,因为它在运行时被全部覆盖,
t
的类型是
wchar\u t*
wchar\u t(&buffer)[size]
是对数组的引用,就像您在普通C
wchar\u t(*buffer)[size]
ypu可以将引用视为“常量-自动取消引用-指针”,并且在99%的情况下它们都是这样实现的

P> > C++编译器可以在编译时只推导参数的类型并调用正确的模板函数。 因此,,
L“hi”
将被推断为
wchar\u t[3]
并调用
\u snwprintf\u s


这当然不适用于
wchar\u t*=malloc(3*sizeof(wchar\u t))
,因为它在运行时被全部覆盖,
t
的类型是
wchar\u t*

它也不是指向
wchar\u t
的指针,不像
wchar\u t buffer[]
。所以它不能绑定到这样一个指针。答案读得很好,我正要对它进行表决,直到我读到“这非常类似于生成参数wchar\u t buffer[]”。它也不是指向
wchar\u t
的指针,不像
wchar\u t buffer[]
。所以它不能绑定到这样一个指针。答案读得很好,我正准备向上投票,直到我读到“这非常类似于生成参数wchar_t buffer[]”。
template <size_t size>
int _snwprintf_s(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format [,
   argument] ... 
); // C++ only