#include <iostream>template<typename T>voID f(T x) { std::cout << sizeof(T) << '\n';}int main(){ int array[27]; f(array); f<decltype(array)>(array);}
编者注:原始代码使用typeof(数组),但这是一个GCC扩展.
这将打印
8 (or 4)108
在第一种情况下,数组显然衰减为指针,T变为int *.在第二种情况下,T被强制为int [27].
是否定义了衰变/替代实施的顺序?是否有更优雅的方式强制类型为int [27]?除了使用std :: vector?
template<typename T> voID f(const T& x) { std::cout << sizeof(T);}
在这种情况下,数组类型不会衰减.
同样,如果您明确指定模板agument T作为引用数组类型,您还可以防止原始版本f中的衰减
f<int (&)[27]>(array);
在原始代码示例中,强制参数T具有数组类型(即非引用数组类型,通过使用typeof或通过明确指定类型),将不会阻止数组类型衰减.虽然T本身代表数组类型(如您所见),但参数x仍将被声明为指针,而sizeof x仍将评估为指针大小.
总结以上是内存溢出为你收集整理的c – 数组衰减到模板中的指针全部内容,希望文章能够帮你解决c – 数组衰减到模板中的指针所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)