关于成员函数声明时调用其它成员函数的问题
想实现某个成员函数参数值,缺省为另外一个成员的返回值。似乎行不通,想请教一下内部的道理和机制。
如下:
情况(1)
class A
{
……
get();
func(int i = this->get() );
}
在VC++和DEV-C++下均报错,大意是this只能使用在一个非static成员函数的内部。
情况(2)
class A
{
……
get();
func(int i = get() );
}
在VC++下报错:对non-static函数get()非法调用。DEC-C++下通过。
情况(3)
class A
{
……
get();
func(int i = A::get() );
}
在VC++下报错:get不是一个全局namespace的成员。DEC-C++下通过。
想请教一下个中原因啊?
如果一定要实现func的缺省参数为get()的返回值,有什么办法呢?谢谢!~~
问题点数:40、回复次数:2Top
1 楼newbiestar()回复于 2005-07-02 22:57:40 得分 25
这个当然不可以……
C++强制规定了缺省参数必须要在编译期确定下来(譬如某个常量)或者必须在编译期就可以确定位置(譬如static的对象),你这样的行为明显违反了这个规定。因为this只有在对象实例已经产生的情况下才能被使用,非静态成员函数的调用使用了this调用协议,会偷偷传递this指针,这个在运行时才能确定,所以当然不能允许你这样调用。Top
2 楼fangrk(加把油,伙计!)回复于 2005-07-02 23:39:59 得分 15
你的get的返回类型应该是int吧?int get(){...}
原因楼上说了,缺省参数是编译期间确定的,而get的返回值明显是运行期的!至于DEV-C++通过,不清楚。可以装个Borland的编译器看看。就算DEV-C++可以,你的程序也是没有可移植性的,而且很脆弱。Top




