我有一个简单的问题:据我所知,我可以声明一个指向某种数据类型或指向常量数据类型的
正如您在上面看到的,我可以在引用中添加const,但我认为这在该上下文中是多余的。但是为什么C ++允许使用类型别名而不是直接使用?
const
指针,但只能声明对常量数据类型的引用,而不能声明对数据类型的常数引用;这是因为引用已经是常量,不能被重新绑定到另一个对象。
因此,当我尝试创建const ref to someDataType
时,会出现编译时错误。但重要的是,当结合使用typedef
或using
的type alias
时。例如:
#include <iostream>
int main() {
int i{ 10 };
// int& const r1{ i }; // error: ‘const’ qualifiers cannot be applied to ‘int&’. Ok here.
using rInt = int&; // or typedef int& rInt;
const rInt r2{ i }; // why const is allowed here?
++r2; // this proves that the const is applied to the reference not to the object referred to.
std::cout << r2 << std::endl; // 11
}
正如您在上面看到的,我可以在引用中添加const,但我认为这在该上下文中是多余的。但是为什么C ++允许使用类型别名而不是直接使用?
Alex24.cpp:8:5: warning: 'const' qualifier on reference type 'rInt' (aka 'int &') has no effect [-Wignored-qualifiers]
的警告信息...你有开启警告吗?我猜这与你的问题无关,因为你正在询问为什么允许使用const(即使被忽略)。 - EljayrInt
更改对象呢? - Alex24using t_Value = int const; t_Value const value{};
相同,第二次应用const
没有效果。但是,您的引用是对可变对象的引用,因此可以使用该引用更改对象。请注意,将const
添加到rInt
不会将引用转换为对带有 const 限定符的对象的引用。 - user7860670r1
会产生一个警告。 - François Andrieux