const int* const Method3(const int* const&) const;
Run Code Online (Sandbox Code Playgroud)
有人可以解释每个const的用法吗?
ild*_*arn 101
如果将其重写为完全等效的,则更容易理解
// v???v???v???v???v???v???v???v???v???v???v???v???
// ??
// v??#1 v?#2 v??#3 v?#4 #5
int const * const Method3(int const * const&) const;
Run Code Online (Sandbox Code Playgroud)
然后从右到左阅读.
#5表示左边的整个函数声明const
,这意味着它必然是一个成员函数而不是一个自由函数.
#4表示左边的指针是const
(可能不会改为指向不同的地址).
#3表示int
左边是const
(可能不会更改为具有不同的值).
#2表示左边的指针是const
.
#1表示int
左边是const
.
将它们放在一起,您可以将其读作一个const
名为的成员函数Method3
,该函数接受一个const
指向int const
(或者const int
,如果您愿意)的const
指针并返回指向int const
(const int
)的指针.
(Nb#2 完全是多余的.)
bri*_*ler 73
阅读:https://isocpp.org/wiki/faq/const-correctness
最后const
意味着该函数Method3
不会修改其类的非可变成员.
const int* const
表示一个指向常量int的常量指针:即一个无法更改的指针,一个无法更改的int:const int&
它之间的唯一区别是它可以是null
const int* const&
表示对常量int的常量指针的引用.通常指针不通过引用传递; const int* &
更有意义,因为它意味着在方法调用期间可以更改指针,这是我可以看到通过引用传递指针的唯一原因const int* const&
,const int* const
除了它可能效率低之外,所有意图和目的都是相同的因为指针是普通旧数据(POD)类型,这些通常应该通过值传递.
Ale*_*ler 22
首先const T
相当于T const
.
const int* const
因此相当于int const * const
.
当读取包含许多const
标记和指针的表达式时,总是尝试从右到左阅读它们(在应用上面的转换之后).所以在这种情况下,返回值是一个指向constint
的const指针.const
由于返回值不是可以修改的左值,因此使指针本身没有任何意义.const
但是,建立指针可以保证调用者不会修改返回的int
(或int
s 数组)Method3
.
const int*const&
变成了int const*const&
,所以它是对const的const指针int
的引用.通过引用传递const指针也没有任何意义 - 你不能修改引用的值,因为指针是const
,引用和指针占用相同的存储空间,所以也没有任何空间节省.
最后一个const
表示该方法不修改this
对象.this
方法体内的指针将具有(理论上)声明T const * const this
.这意味着const T*
对象将能够调用T::Method3()
.
Yon*_*ony 12
记住规则的一个简单方法const
是以这种方式思考:const
适用于左边的东西,除非左边没有任何东西.
所以在这种情况下const int * const
,第一个const在它的左边没有任何东西,所以它适用于int
,而第二个const在它的左边有一些东西,所以它适用于指针.
此规则还告诉您在您拥有的情况下会发生什么const int const *
.由于两个const适用int
于此表达式都是多余的,因此无效.
归档时间: |
|
查看次数: |
52073 次 |
最近记录: |