求解一个关于临时对象的问题class A{public:A(char* ss){strcpy(s,ss)}~A(){//strcpy(s,0000)}char s[
求解一个关于临时对象的问题
class A
{
public:
A(char* ss)
{
strcpy(s,ss);
}
~A()
{
//strcpy(s,"0000");
}
char s[10];
};
对于类A,
char* c=A("a").s;
是未定义行为, ,但我无论如何测试c的值始终是"a"
请问c不是"a"的例外情况是什么,到底能不能这样用,希望大家多多指导!
[解决办法]可能再某种情况下造成指针悬空,造成不可预知的问题。
[解决办法]to FengPrince,ganpengjin1:
我知道这样是不对的,但始终没找到例外的情况.
FengPrince的代码在我这运行两次输出都是a, 我用的vs2013.
我想找到那个例外情况
这不是例外不例外的问题,编译执行没错不代表是正确的。
使用临时对象的返回值就是错的。
不能有其他的解决方法吗?
你一定要这样用临时对象返回值的理由是什么?
[解决办法]你可以
(1) 把代码搞的更复杂。
(2) 多试几种编译器,e.g., g++, icc, clang++ ...。
(3) 多换几个平台,e.g., ubuntu, mac ..., 32-bit, 64-bit ...。
看看有没有机会看到垃圾数据或者程序崩溃什么的。
ps. 就上楼上说的,这种“钻研”也没太大意义。
[解决办法]to ananluowei:
谢谢
我也知道不能这样用, 但想知道例外情况是什么,所以发了这个帖子
VC6下才用O2编译.
class A
{
public:
A(char* ss)
{
strcpy(s,ss);
}
~A()
{
//strcpy(s,"0000");
}
char s[10];
};
int main()
{
char* p = 0;
{
p = A( "aaaaa" ).s;
}
{
char s[10] = "12345";
scanf( "" ,s );
}
puts( p );
return 0;
}