我的一位同事最近表示,上述语句不是类型安全的,我应该使用其他内容,因为您需要尽可能多的类型安全结构来减少可能的错误数量。
虽然我同意类型安全,但我有点困惑,因为这是有问题的代码类型(仅修改了 data[] 的内容和长度)
unsigned char data[] = {1,2,3,4,5};
int data_len = sizeof(data) / sizeof(data[0]);
类型不安全的部分在哪里?
不用说,除了评论之外,该同事不会进一步解释。
PS:这用于将初始化数据从构造函数复制到类中,这里不存在 C++11 编译器,因此我们不能使用 std::array 或其他花哨的数组初始化。技术。
也许您的同事的意思是,将此表达式与指针一起使用会产生意想不到的结果。这个错误是初学者经常犯的。例如
void f( unsigned char data[] )
{
int data_len = sizeof(data) / sizeof(data[0]);
//...
}
//...
unsigned char data[] = {1,2,3,4,5};
f( data );
因此,在一般情况下,使用模板函数而不是表达式会更安全。例如
template <class T, size_t N>
inline size_t size( const T ( & )[N] )
{
return N;
}
考虑到有模板结构std::extent
在 C++ 11 中,可用于获取维度的大小。
例如
int a[2][4][6];
std::cout << std::extent<decltype( a )>::value << std::endl;
std::cout << std::extent<decltype( a ), 1>::value << std::endl;
std::cout << std::extent<decltype( a ), 2>::value << std::endl;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)