C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 数组衰减到模板中的指针大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
虑以下代码
#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 – 数组衰减到模板中的指针所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。