关于单参数构造函数的问题
class A
{
private:
int _a;
public:
A(int a) : _a(a)
{
}
friend int f1(A&);
friend int f2(const A&);
friend int f3(A);
friend int f4(const A);
};
f1(0);调用就错误
f2(0);f3(0);f4(0);都可以.
后连个我明白,但f1和f2的区别在哪里呢?为什么一个行一个就不行呢
[解决办法]
实际上就是下面几个
A& a=0; (1)
const A& a=0; (2)
A a=0; (3)
const A a=0; (4)
(3)(4)不用解释了
(1)不能编译通过 ,提示"不能将int类型转换成A& 类型"
(2)能通过,且 A的带参构造函数被调用.
在MSDN 中找到对&引用初始化的解释过程:
简单的E文,清楚了吧
[解决办法]
其实这里与编译器的实现相关的,按标准来说是可以的,除非你的c++编译器不支持标准.
BCB6是可以的,但是有一个警告,意思就是A&指向一个临时变量,而在c++标准中,是不允许
一个非const的引用指向一个临时存在的变量的.在这里临时变量的作用域和引用的作用于相同
所以可以编译通过.
而在vc6中就没办法编译通过了."can't convert parameter 1 from const int to a class A& "
对这个错误具体我也说不太清楚.请高人指点了
还是按标准来吧,呵呵