65,186
社区成员




Test& f()
{
Test t;
t.i=1;
return t;
}
Test g()
{
Test t;
t.i=1;
return t;
}
int main()
{
Test t1=f(); //---(1)
Test t2=g(); //---(2)
}
void g(Test* t)
{
t->i=1;
}
char c;
.
.
.
if(c>0X38)
...;
是不是可能导致未定义行为?或者准确来讲是Implementation Defined行为!
但如果我能够确保c的范围来保证此语句永远不会发生未定义行为。
同理,返回局部对象的引用,只有当局部对象所在的空间被污染了,才可能导致出错;没污染就不会出错。会不会被污染这一行为是未定义的!
我要做的就是确保该数据不被污染(破坏)!
或许我压根就做不到??
这才是我想问的,就目前而言,没有人给出我不可控的证据!
PS:准备结帖了,这个东西找工作意义不大!!#include<stdio.h>
struct test
{
~test()
{
puts( "~test" );
}
int val[10];
};
test f(){ test x;return x;}
int main()
{
test x = f();
return 0;
}
VS系列,都是输出2次~test