首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于单参数构造函数的有关问题

2012-02-05 
关于单参数构造函数的问题class A{private:int _apublic:A(int a) : _a(a){}friend int f1(A&)friend in

关于单参数构造函数的问题
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& "
对这个错误具体我也说不太清楚.请高人指点了

还是按标准来吧,呵呵

热点排行
Bad Request.