#include<iostream> template<const char p[1] > void f() { std::cout << sizeof(char) << std::endl; std::cout << sizeof(p) << std::endl; std::cout << p << std::endl; std::cout << std::endl; } signed main() { static const char a[] = "123"; f<a>(); static const char b[] = "334444"; f<b>(); }为什么这段代码中非模板类型形参的参数数组大小只指定却可以运行更大的数组作为实参运行
时间: 2023-10-30 11:00:59 浏览: 116
网络安全业务竞赛
这段代码中的非模板类型形参 `p` 是一个指向 `const char` 类型的指针,其大小在编译时已经确定为一个指针的大小(通常是 4 字节或 8 字节,取决于编译器和操作系统)。因此,无论实参数组的大小是多少,它们都可以被隐式地转换为指向数组第一个元素的指针,并且可以正常运行。但是,由于 `p` 是一个指针,所以在输出时必须使用 `std::cout << p << std::endl` 而不是 `std::cout << sizeof(p) << std::endl` 来输出指针指向的字符串。
阅读全文