知识卡片
数组函数会退化
内容
数组或函数按值传入模板时通常退化为指针,因而数组长度等类型信息会丢失;引用形参则可保留原数组或函数类型。需要编译期边界时,应通过数组引用等接口传递,而非从指针反推原对象大小。
参考来源
- 位置:《Effective Modern C++》第1章《类型推导》,条款一:理解模板类型推导(源文件:_epub-src/EPUB/text/ch002.xhtml)
- 结论依据:原文对比传值与数组引用形参,展示数组长度只有后者保留,函数实参遵循相同退化规律。
- 原始内容:数组实参 上面的内容几乎覆盖了模板类型推导的大部分内容,但这里还有一些小细节值得注意,比如数组类型不同于指针类型,虽然它们两个有时候是可互换的。关于这个错觉最常见的例子是,在很多上下文中数组会退化为指向它的第一个元素的指针。这样的退化允许像这样的代码可以被编译: const char name [] = "J. P. Briggs" ; //name的类型是const char[13] const char * ptrToName = …