为什么这个C++代码会打印它打印的内容?
#include <vector>
#include <stdio.h>
int p(const char *x) {
printf("%s\n", x);
return 0;
}
int main()
{
if (p("LEFT") == p("RIGHT")) ;
std::vector<int> v1;
v1.push_back(1);
std::vector<int>::iterator it = v1.erase(v1.begin());
if (it == v1.end())
printf("OK\n");
else
printf("FAIL\n");
std::vector<int> v2;
v2.push_back(1);
if (v2.erase(v2.begin()) == v2.end())
printf("OK\n");
else
printf("FAIL\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我对OK/FAIL部分感到困惑.这与LEFT/RIGHT部分相矛盾.这里发生了什么事?
我的输出是:
LEFT
RIGHT
OK
FAIL
Run Code Online (Sandbox Code Playgroud)
相关性与评估顺序无关.
实际上,您正在调用未指定的行为.你无法分辨哪个部分==会先评估.
想一想:
int x; // x is 0 initially
int foo()
{
x++;
return x;
}
int goo()
{
return x;
}
int main()
{
bool b = foo() == goo();
}
Run Code Online (Sandbox Code Playgroud)
如果foo(返回1)首先评估,b将true(goo将返回1).
如果goo(返回0)首先计算,b则将false(foo将返回1).
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |