const int* const Method3(const int* const&) const;有人能解释一下每个const的用法吗?
发布于 2011-04-09 01:36:06
请阅读:https://isocpp.org/wiki/faq/const-correctness
最后的const表示函数Method3不修改其类的不可变成员。
const int* const表示指向常量int的常量指针:即指向不能更改的int的指针: that和const int&之间的唯一区别是它可以为null
const int* const&表示对指向常量int的常量指针的引用。通常指针不是通过引用传递的;const int* &更有意义,因为它意味着指针可以在方法调用期间更改,这将是我看到通过引用传递指针的唯一原因,const int* const&在所有意图和目的上都与const int* const相同,只是它的效率可能较低,因为指针是普通的旧数据类型,通常这些类型应该通过值传递。
发布于 2011-04-09 01:41:24
如果您将其重写为完全等效的,则更容易理解
// 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;然后从右向左阅读。
#5说明左边的整个函数声明是const,这意味着这必须是一个成员函数,而不是一个自由函数。
#4表示指向左侧的指针为const (不能更改为指向其他地址)。
#3表示左侧的int为const (不能更改为不同的值)。
#2表示指向左侧的指针是const。
#1说明左边的int是const。
综合起来,您可以将其读作一个名为Method3的const成员函数,该函数接受对指向int const (如果愿意,也可以是const int )的const指针的引用,并返回指向int const (const int)的const指针。
(注:#2 is entirely superfluous。)
发布于 2011-04-09 01:39:24
首先,const T等同于T const。
因此,const int* const等同于int const * const。
当读取包含大量const标记和指针的表达式时,始终尝试从右到左读取它们(在应用上面的转换之后)。因此,在本例中,返回值是指向常量int的常量指针。将指针本身设为const在这里没有任何意义,因为返回值不是可以修改的左值。然而,将指针对象设为const可以保证调用者不能修改Method3返回的int (或int数组)。
const int*const&变为int const*const&,因此它是指向常量int的常量指针的引用。通过引用male传递常量指针也是没有意义的-你不能修改引用的值,因为指针是const的,引用和指针占用相同的存储空间,所以也不会节省任何空间。
最后一个const表示该方法不修改this对象。方法体中的this指针将具有(理论上)声明T const * const this。这意味着const T*对象将能够调用T::Method3()。
https://stackoverflow.com/questions/5598703
复制相似问题