我有
string email_list[] = {"aaa@sds.com", "bbb@sdsds.com"}; for (int i = 0; i < sizeof(email_list)/sizeof(email_list[0]); i ++) { ... }
我看到一个有趣的事情:在sizeof(email_list[0])
VS2012的调试模式下返回28; 但它在发布模式下提供24.但sizeof(email_list)/sizeof(email_list[0])
总能给出正确的价值 - 2
.所以不确定这是否是循环通过这样一个数组的正确和可靠的方法?
怎么样在其他STL容器,例如vector
,map
...?
sizeof(arr)/ sizeof(arr [0])将始终为任何类型恢复固定大小数组arr中的元素数.
不过要小心; 如果arr已经腐烂成指针,它就不起作用.
始终定义arr [0],因为零长度数组在C++中是不合法的.
至于调试和释放之间字符串的大小是不同的:这是允许的,因为标准没有规定该对象的大小.您可能会发现调试版本有一个类型指针来帮助调试.