Mac上C++中for循环的奇怪行为

El_*_*oco 2 c++ macos

我有以下功能:

std::vector<std::vector<Surfel>> testAddingSift(
        const Groundtruth &groundtruth, 
        SurfelHelper &surfelHelper) {
    for (int k = 0; k < 10; k++) {
        std::cout << "hej" << k <<std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我忘记返回时,vector<vector<Surfel>>我得到了一个无限循环:

 hej1025849
 hej1025850
 hej1025851
 hej1025852
Run Code Online (Sandbox Code Playgroud)

当我回来时,vector<vector<Surfel>>我得到:

hej0
hej1
hej2
hej3
hej4
hej5
hej6
hej7 
hej8
hej9
Run Code Online (Sandbox Code Playgroud)

当然忘记返回向量是错误的,但为什么for循环会受到影响?

我正在使用带有Sierra和CLion的MacBook Pro,我觉得它很铿锵.

Fra*_*eux 8

无法从具有非void返回类型的函数返回是未定义的行为.根据定义,这样做几乎不可能推断出由此产生的行为.这可能会影响在预期会遇到未定义行为的点之前的代码行为.

  • @El_Loco关于未定义行为的最糟糕的事情之一是有时它看起来像是有效的.未定义的行为可能导致任何行为,包括您期望的行为.它暂时未被发现,并且可以在任何时候突然停止工作,没有明显的原因.这甚至可以让你相信某些东西是有效的c ++而不是. (3认同)