gpt4 book ai didi

c++ - C++ 模板类中的“const”方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:39:21 24 4
gpt4 key购买 nike

我刚刚开始阅读 C++ 中的模板类,并且遇到了一些我不知道的语法。类方法的原型(prototype)为:

template <class Type> class Range {
....
bool Below (const Type& value) const;
....
}

并定义为:

template <class Type> bool Range<Type>::Below(const Type& Value) const {

if (Value < Lo) return true;
return false;
}

在列出方法输入后,任何人都可以帮助我理解“const”标志的含义吗?我知道在输入之前而不是之后使用。干杯, jack

最佳答案

const 成员函数中,顶级 const 限定符应用于类的每个成员,除非该成员被标记为可变 (这意味着从不 const)。

您还可以拥有 volatile 成员函数以及 volatileconst

请注意,指针和引用的行为可能令人惊讶:

struct X {
int a;
int* pa;
int& ra;
X()
: a(1)
, pa(&a)
, ra(a)
{}

void foo() const {
*pa = 2; // Ok, this is the pointer being const, not the value being pointed to.
ra = 3; // Ok, this is the reference being const, not the value being referenced.
a = 4; // Error, a is const
pa = &a; // Error, pa is const.
}
};

下面是如何应用顶级 const 限定符:

  • int 变为 int const - 一个常数整数。
  • int* 变成了 int* const - 一个常量指针,而不是 int const* - 一个指向常量的指针。
  • int& 变成了 int& const - 常量引用,而不是 int const& - 对常量的引用。将 const 应用于引用不会执行任何操作,因为它们无论如何都无法更改为引用另一个对象。

另一种思考方式是,在非 const 成员函数中 this 的类型为 X* const,而在 const 成员函数中 this X const* const。请注意 this pointer 是如何始终保持不变的。

关于c++ - C++ 模板类中的“const”方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20955784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com