我可以指望任何STL容器的sizeof(string)或sizeof吗?

sta*_*yli 1 c++ stl

我有

string email_list[] = {"aaa@sds.com", "bbb@sdsds.com"};

for (int i = 0; i < sizeof(email_list)/sizeof(email_list[0]); i ++) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

我看到一个有趣的事情:在sizeof(email_list[0])VS2012的调试模式下返回28; 但它在发布模式下提供24.但sizeof(email_list)/sizeof(email_list[0])总能给出正确的价值 - 2.所以不确定这是否是循环通过这样一个数组的正确和可靠的方法?

怎么样在其他STL容器,例如vector,map...?

Bat*_*eba 5

sizeof(arr)/ sizeof(arr [0])将始终为任何类型恢复固定大小数组arr中的元素数.

不过要小心; 如果arr已经腐烂成指针,它就不起作用.

始终定义arr [0],因为零长度数组在C++中是不合法的.

至于调试和释放之间字符串的大小是不同的:这是允许的,因为标准没有规定该对象的大小.您可能会发现调试版本有一个类型指针来帮助调试.