为什么我的C 函数拒绝返回const引用

why my c++ function refused to return a const reference?

本文关键字:返回 const 引用 拒绝 函数 我的 为什么      更新时间:2023-10-16

让我们看看以下代码:

template<class T,class Ref>
class test{
private:
    T data;
public:
    test(const T& x):data(x){};
    const Ref operator*(){
        return data;
    };
}
int main(){
    test<int,int&> t(1);
    *t=2;
    return 0;
}

上述代码效果很好。函数operator*()应该返回常量参考const Ref,但是为什么它刚刚返回Ref

函数operator*()应该返回const参考const Ref,但是为什么它刚刚返回Ref

请注意,对于const Refconst直接在Ref(即引用)上有资格,而不是所引用的类型。没有这样的事情,例如constemifififififififed参考,在这种情况下,const预选赛被忽略了。这意味着const RefRef相同(即int&)。

[dcl.ref]/1

CV合格的参考文献是不明式的,除非CV-Qualifier 通过使用Typedef-name([DCL.Typedef], [temp.param])或宣告特征词([dcl.type.simple]),在这种情况下 CV Qualifier被忽略。[示例:

typedef int& A;
const A aref = 3;   // ill-formed; lvalue reference to non-const initialized with rvalue

AREF的类型是" lvalue参考int",而不是" lvalue参考" const int"。 - 结束示例]

编辑:好的,如果您想要分配的编译时间错误,则可以这样写:

template<class T> 
class test { 
private: 
   T data; 
public: 
   test(const T& x):data(x){};
   const T& operator*() { return data; }
};
int main(){ 
    test<int> t(1); 
    *t=2;    // error
    return 0; 
}