为什么我的C 函数拒绝返回const引用
why my c++ function refused to return a const reference?
让我们看看以下代码:
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 Ref
,const
直接在Ref
(即引用)上有资格,而不是所引用的类型。没有这样的事情,例如constemifififififififed参考,在这种情况下,const
预选赛被忽略了。这意味着const Ref
与Ref
相同(即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;
}
相关文章:
- 从函数返回const char*数组
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 从内部使用静态 std::string 的函数返回 const char * 是否安全?
- 从类方法返回 "const char*" 作为 std::string&
- 为什么const rvalue合格的std ::可选:: value()返回const rvalue参考
- 通过移动分配从算术运算符过载中返回const值
- 从本机代码返回"const char*"并在java中获取"字符串"
- 为什么我的C 函数拒绝返回const引用
- 通过参考返回和const函数返回const值的函数之间的差异
- 如果我返回const定义的对象,为什么const关键字被取消资格
- 返回const lvalue引用rvalue临时?为什么这项工作
- 内置类型的返回const值
- 返回 const std::string*& from a std::string *tab[11]
- 如何在静态方法中返回const类型
- 返回const引用和非常数成员函数调用
- 为什么不允许我将函数返回 const char* 的结果分配给 char*,bt 可以将字符串文字(常量)分配给 cha
- 在 C++ 中返回 const 字符串引用的字符串文本
- 为什么我们必须从一元前缀运算符重载返回 const 引用
- 在返回 const 错误的函数中传递值
- 为什么我可以将返回 'const T&' 的函数的返回值分配给 'T' 变量,而不是 'T&' 变量?