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

标签 c++ stl

我有

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。所以不确定这是否是遍历此类数组的正确可靠方法?

vectormap ...等其他STL容器怎么样?

最佳答案

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

但是要小心;如果 arr 已衰减为指针,则它不起作用。

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

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

关于c++ - 我可以指望任何 STL 容器的 sizeof(string) 或 sizeof 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209018/

相关文章:

C++ 随机数

c++ - fwrite 比 Windows 中的 WriteFile 快吗?

C++ - 从控制台应用程序运行 Windows Media Player - COM

c++ - qmake:将uic生成的头文件添加到安装目标

c++ - 重载 C++ STL 方法

c++ - 打印出存储在 vector 中的字符串

c++ - 我的 QuickSort 代码不适用于 1000000+ 个元素(一百万个元素或更多)

c++ - 为什么 std::map 重载运算符 < 不使用比较

STL - STLempty()线程安全吗?

C++ UNICODE 和 STL