回复 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