【发布时间】:2009-12-08 00:08:01
【问题描述】:
请考虑以下代码:
#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(array),但这是一个 GCC 扩展。
这将打印出来
8 (or 4)
108
在第一种情况下,数组显然衰减为指针,T 变为int*。在第二种情况下,T 被强制为int[27]。
是否定义了衰减/替换实现的顺序?有没有更优雅的方式强制类型为int[27]?除了使用 std::vector 吗?
【问题讨论】:
-
你在哪里找到 C++ 编译器
sizeof(int) == 1?第二个电话我得到 108。 -
是的,当然 gcc 已经移到了 4 字节整数;-) 我在生成测试用例时引入了一个错误。
-
我很惊讶第二次调用编译。您不能在 C++ 中按值传递数组。 [编辑:啊,
T具有数组类型,但sizeof(x)仍会输出 8 或 4。没关系。 :)] -
不错的 necro 评论 :-) 你只是在浏览我的旧问题吗? :-) 第二种情况是将数组作为参考传递,这是我问的时候没有意识到的。查看接受的答案