c++ - 这是 for 循环的合法使用吗?

标签 c++

例如:

 vector<int> something;
 //imagine i add some elements to the vector here

 int* pointy;
 for (int i = 0; i < something.size(); pointy = &something[i++]) {
      //do some work with pointy
 }

它似乎有效并为我省了线,但是是否有任何奇怪的错误会因此而突然出现的危险?

最佳答案

这可能不合法,因为 pointy 在第一次迭代时未分配。如果循环在初始迭代期间没有取消引用 pointy,则可能没问题,但如果不看循环体就无法判断。

由于您使用的是 std::vector,使用迭代器将为您节省另一行,因为您不需要声明 pointy。您可以通过从当前迭代器中减去 something.begin() 来确定没有 i 的偏移量:

for (vector<int>::iterator iter = something.begin() ; iter != something.end() ; ++iter) {
    cout << "Item at index " << (iter - something.begin()) << " is " << *iter << endl;
}

关于c++ - 这是 for 循环的合法使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882506/

相关文章:

c++ - QTCPSocket同时由定时器启动

C++ 链表核心转储错误

c++ - 将 std::string 转换为 char* const* 的数组

c++ - Python:将 unicode 字符串传递给 C++ 模块

c++ - C/C++ 使用 tcmalloc

c++ - Visual Studio 2010 全局 VC++ 目录 Redux

c++ - 显式调用基本复制构造函数 => RTTI 信息丢失。漏洞?

c++ - 使用 std::launder 从指向非事件对象的指针获取指向事件对象成员的指针?

c++ - ExprTk:当表达式的值改变时是否必须重新编译表达式

c++ - 我如何才能知道 Linux 系统是使用 Wayland 还是 X11?