从整型模板推断c++数组大小
C++ array size inferring from integer template
我遇到了模板版本_snwprintf_s
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[]
非常相似,但有一些优点:例如,它允许您在这里执行模板参数推导,并且我也看到优化器在以这种方式传递数组的某些情况下执行得更好。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '