我有
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 的 Debug模式下返回 28;但是它在 Release模式下给出了 24。但是 sizeof(email_list)/sizeof(email_list[0])
总是给出正确的值 -- 2
。所以不确定这是否是遍历此类数组的正确可靠方法?
vector
、map
...等其他STL容器怎么样?
最佳答案
sizeof(arr)/sizeof(arr[0]) 将始终恢复任何类型的固定大小数组 arr 中的元素数。
但是要小心;如果 arr 已衰减为指针,则它不起作用。
arr[0] 始终被定义,因为零长度数组在 C++ 中是不合法的。
至于调试和发布之间字符串的大小不同:这是允许的,因为标准不强制该对象的大小。您可能会发现调试版本有一个类型化的指针来帮助调试。
关于c++ - 我可以指望任何 STL 容器的 sizeof(string) 或 sizeof 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209018/