如何阅读这个C++语句

How do read this C++ statement

本文关键字:C++ 语句 何阅读      更新时间:2023-10-16

我目前正在阅读Prata的C++引物Plus,并发现了关于*this指针的声明:

const Stock &topval(const Stock &s) const;

假设Stock是一个类,topval是一个函数,

你是如何解读这份声明的

我试着使用顺时针/螺旋的方法,但我被所有的常量弄糊涂了。我相信,了解如何阅读它将使我更好地理解它试图证明的概念。

谢谢!

             topval(              )        // topval is a member function...
                                    const; // In which *this is const...
                    const Stock &s         // Taking in a reference
                                           //     to a const Stock...
const Stock &                              // And returning a reference
                                           //     to a const Stock.

这是一个函数,它接受并返回对const Stock的引用(需要明确的是,不一定是同一个),并且在这样做时不会更改this

它声明了一个成员函数(因为最后一个const),它:

  • 命名为topval

  • 不要更改类的任何其他成员,请参阅最后的const

  • 只接受一个参数:const Stock& s

  • 返回const Stock& 类型的值

如果人们明智地编写以下代码会容易得多:

const Stock& topval(const Stock& s) const;

topvalconst函数,取一个称为sconst Stock&,返回一个const Stock&

简单!

末尾的const应用于this指针。自变量中的const应用于自变量,而句子第一部分的const应用于返回值。

简化语法解释

Return value - function name - ( argument list ) - const modifier. 

const说明符是一个函数修饰符,用于指定传递到此函数的指针是const,因此您不能修改成员变量,但类定义中声明为可变的变量除外。

详细的语法是:

noptr-declarator ( parameter-list ) cv(optional) ref(optional) except(optional) attr(optional) -> trailing require

因此你声明了一个方法

在接收到对Stock对象的const引用作为输入后,返回对Stockconst引用,而this指针是被调用此方法的常量指针。

是一种不常用但等价且有争议的正确书写方式

Stock const &topval( Stock const &s) const;

现在可以发现cv限定符实际应用的位置(即限定符的左侧)

const Stock &topval( const Stock &s) const;

因此,您正在声明一个函数topval,该函数将Stock类型的对象的内存地址返回为const。函数topval将Stock对象的内存地址作为参数。由于这是常量,您将无法在topval中更改此对象。

最后,末尾的const表示,此函数(topval)将无法更改Stock类的任何成员。。

我认为这或多或少就是这个意思,已经有一段时间没有c++了