回复 8楼 liufashuai
第一个问题:默认参数只允许在函数参数中使用,由编译器来帮你传递,而对于声明函数指针时的参数列表中是不能有默认参数的,调用的时候也必须传递所有参数。
你那段代码在gcc下编译是通不过的,当然我不知道你用的是什么编译器。
第二个问题:
程序代码:#include<iostream>
using namespace std;
class X {
public:
X(double d) : value(d) {}
operator double() { return value; }
private:
double value;
};
int main()
{
X x(1.0);
cout << (1.0 + x) << endl;
}如果按照你的说法,cout << (1.0 + x) << endl; 这句肯定是编译不能过的,但是在gcc4.40下却通过了,并且输出了2。这里存在这一个隐式的转换,因为X有一个到double的类型转换函数,1.0 + x的时候,编译器就会先把x转换成double来参加运算。
如果你定义了两个基本类型的转换,那么编译器就不知道应该调用哪个转换,因为两种类型都可以隐式转换后来参加运算。就象newdos说的那样产生了二义性。
所以呢你还只是个需要加强基础的新手,不要随便否定别人的看法,更不要说别人幼稚,因为幼稚的人是你。

My life is brilliant








