如何阅读这个C++语句
How do read this C++ statement
我目前正在阅读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;
topval
是const
函数,取一个称为s
的const 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
引用作为输入后,返回对Stock
的const
引用,而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++了
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- c++:定义if语句中的模板
- 主线的等价语句是什么