- 论坛徽章:
- 0
|
我用emacs23+gdb来调试C++,发现了一件怪事,不知是bug还是我不知道的规则:
在类A的公有函数中,我定义一个复变量:i1,我发觉如果我将这个变量设为返回值时,无法直接查看它的值:
部分程序为:
complex<double> A::fun1()
{
complex<double> i1;
i1=complex<double>(0,0);
......
return i1;
}
我调试时用命令:(gdb) p i1
得到的结果是:$1 = (complex<double> *) 0xbff4e278
如果我用:(gdb) p i1.real()
得到的结果是:Cannot resolve method (null)real to any overloaded instance
如果我用:p (*Gh).real()
得到的结果是:$2= (double &) @0xbff4e278: 0
我并没有将其设为指针形式。如果将程序改为:
complex<double> A::fun1()
{
complex<double> i1,i2;
i1=complex<double>(0,0);
......
return i2;
}
这时我再用:(gdb) p i1
会得到:$2 = {_M_value = 0 + 0 * I}
现在回想起来好像对于容器类如:vector<double>等也会有类似的情况发生。 |
|