【发布时间】:2016-04-01 07:24:15
【问题描述】:
为了避免在更改数组大小时悄悄地破坏,我建议
std::copy(a, a + sizeof(a)/sizeof(a[0]), b);。更好的是,将sizeof()垃圾包装在宏中 - 或者更好的是,使用函数模板代替:template <typename T, size_t N> size_t size((T&)[N]) { return N; }– j_random_hacker 2012 年 9 月 8 日 7:29
当我今天早上查看问答时,我发现了这条评论(有 4 个赞成票)。我对 C++ 很陌生。 a+sizeof(a[0]) 在这里是什么意思,我认为sizeof(a[0]) 会返回 4 代表一个 int 内存字节?非常感谢提前!!。
【问题讨论】:
-
“a+sizeof(a[0]) 在这里是什么意思”也许是一切,因为它没有在这里使用。
-
你可以在我的answer here找到函数模板解决方案的很好的解释
-
@ShafikYaghmour 谢谢!
-
请注意,与使用
std::copy(std::begin(a), std::end(a), b)相比,您好多更好!除了这个符号实际上很短之外,它还可以防止意外误用sizeof():如果a恰好是使用std::begin(a)或std::end(a)的指针将导致错误,而使用sizeof(a)的版本愉快地编译生成结果错误! -
@DietmarKühl 哦,非常感谢你!我会记住这一点的!我将尝试使用现代约定和流行的方法(例如使用数组、向量容器和字符串,而不是使用内置数组或字符数组)。那些老式的我会尽量避免使用它们!