int i=0; int const & m=i; const int & n=i; int & const p=i; 在c++里,这三者有什么区别? 第3个int & const j=i; 在vc中编译的时候能通过,但警告: anachronism used : qualifiers on reference are ignored 这里提到引用前的任何修饰将被忽略掉,第3个相当于int & j=i; 而前两个应该没区别,vc中都将其看做const int &类型
米脂
浏览 331回答 1
1回答
www说
我只见过int const * m, const int * n和int * const p的区别,那里前两者是等价的,表示m、n是指向i的指针,*m,*n是不能改变的,但是m,n本身都可以改变;第三个是说p指向的东西不能变,也就是p不能变了。这里我想既然m,n,p都是对i的引用,声明时的&只是表示它是个引用,而对于一个引用类型的变量再给赋值时用的是m=j,而再也不会用到&符号了。所以我的理解就是引用变量根本不存在,它就是被引用的变量换个名字而已。这样看来声明时&和m是不能拆开的,声明时单独的m没有任何意义。所以前两者应该等价,第三种不成立。-------------------------------------呵呵,应该把警告当成一种错误对待。我用gcc编译器试了一下,出现如下错误:Main.cpp:13: 错误: ‘const’限定符不能应用到‘int&’上