确定数组大小时,std::size()和sizeof()之间的区别是什么?

4

请考虑

int array[5]{};
std::cout << std::size(array) << std::endl;

这将给我结果为5。

int array[5]{};
std::cout << sizeof(array) << std::endl;

这将给我结果为20。

为什么呢?size和sizeof有什么区别?


我也很好奇,因为在现代C++中,std::sizeconstexpr的,它似乎取代了sizeof。我们什么时候应该使用sizeof而不是std::size?有哪些优缺点? - 303
1
它们是两个不同的工具,提出了两个不同的问题。如果您不确定使用哪个工具,那么要么是因为您不理解这些问题之间的区别,要么是因为您不确定自己想要问什么问题。 - Nicol Bolas
@NicolBolas 是的,我已经有一段时间没有使用 sizeof 了,快速搜索也不会有什么坏处。不确定我当时到底在问什么。 "走开,这里没什么好看的" :D - 303
1个回答

8
  • std::size 返回数组元素的数量。
  • sizeof 是一个运算符,返回对象在内存中占用的字节数。

在您的情况下,int 占用 4 个字节,因此 sizeof 返回的值比 std::size 大 4 倍。

参考资料:


有一个旧技巧可以使用sizeof计算数组元素的数量:

int arr[] = {1, 2, 3, 4, 5}; 
size_t arr_size = sizeof(arr)/sizeof(arr[0]);

但在现代C++中,这绝不应该使用,而应该使用std::size


1
一个简短的回答:永远不要这样做。好吧...就是这样:D 我想sizeof(arr)/sizeof(arr[0])static inline一样,属于现代C++的范畴。 - 303

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接