隐式转换问题

来源:互联网 发布:淘宝联盟返利时间 编辑:程序博客网 时间:2024/05/18 01:04

1.对“普通”T&的初始化必须是一个类型T的左值,因此隐式转换不会被用于非const的引用参数。

2.对一个const T&的初始式不必是一个左值,甚至可以不是类型T的;在这种情况下:

【1】首先,如果需要将应用到T的隐式类型转换。

【2】而后将结果存入一个类型T的临时变量。

【3】最后,将此临时变量用做初始式的值。

double& dr =1  //错误:需要左值

const double& cdr =1 // ok

对后一个初始化的解释为:

double temp = double(1);

const double& cdr = temp;


#include <iostream>using namespace std;class X{private:    double x;public:    X(int t){x=(double)t;}    int m1(){return 1;}    int m2() const{return 2;}    friend int f1(X&){return 1;}    friend int f2(const X&){return 2;}    friend int f3(X){return 3;}};int f1(X&);int f2(const X&);int f3(X);void h(){    f1(99);//编译出错,原因是隐式转换不会被用于非const的引用参数    f2(99);    f3(99);}int main(){    h();}

0 0