int& foo() {
printf("Foo\n");
static int a;
return a;
}
int bar() {
printf("Bar\n");
return 1;
}
void main() {
foo() = bar();
}
Run Code Online (Sandbox Code Playgroud)
我不确定应该首先评估哪一个.
我在VC中尝试过首先执行bar函数.但是,在g ++编译器(FreeBSD)中,它首先给出了foo函数的评估.
很多有趣的问题来自上面的问题,假设我有一个动态数组(std :: vector)
std::vector<int> vec;
int foobar() {
vec.resize( vec.size() + 1 );
return vec.size();
}
void main() {
vec.resize( 2 );
vec[0] = foobar();
}
Run Code Online (Sandbox Code Playgroud)
根据以前的结果,vc计算foobar(),然后执行向量运算符[].在这种情况下没有问题.但是,对于gcc,由于正在评估vec [0]并且foobar()函数可能导致更改数组的内部指针.执行foobar()后,vec [0]可以无效.
是否意味着我们需要将代码分开
void main() {
vec.resize( 2 );
int a = foobar();
vec[0] = a;
}
Run Code Online (Sandbox Code Playgroud)