此函数和成员函数的恒定正确性
const-correctness for this and member functions
假设我有一个通用类 A
class A {
...
int a; // a member
void foo() const{...} // a member function qualified as const
...
};
这意味着,如果我声明一个像 A k;
这样的A
实例,然后我调用k.foo();
作用于/内部的 this
指针,该调用foo
是类型 const A * const
的东西。
现在我想知道为什么这篇博文中的代码有效,特别是为什么这不适用于全局变量。
我的解释是关于指针别名的隐藏操作,例如隐式复制this
指针,在此复制过程中,结果不再const
(出于某种原因......),但它仍然是一个this
指针,这意味着它是指向同一实例的指针。
我的问题是:如果在声明成员函数的接口之后应用它,const
真正做什么?您对链接的博客文章有具体的答案吗?
来自博客的代码
#include <iostream>
class counter {
public:
int i;
counter();
int inspect() const;
void increment();
};
counter sigma_inspect; // sigma_inspect is global
counter::counter() { i = 0; }
int counter::inspect() const {
sigma_inspect.increment();
return i;
}
void counter::increment() {
++i;
return;
}
int main(void) {
counter a;
std::cout << a.inspect() << "n";
std::cout << sigma_inspect.inspect() << "n";
std::cout << sigma_inspect.inspect() << "n";
return 0;
}
博客文章中的调用正在使用非常量sigma_inspect
,并且它正在其上调用非常量方法,而不是通过常量this
指针调用所述方法。那又怎样?作者似乎期待魔法,而不是他所写的显而易见的东西。就像拥有
T* t = ...;
const T* ct = t;
t->foo(); // foo() is not const, but hey,
// I also have a const pointer now (ct),
// so why can I still use this???
一般来说,如果有人说C++愚蠢,它会告诉你更多关于作者的信息,而不是语言:)
相关文章:
- "error: no matching function for call to"构造函数错误
- std::函数常量正确性未遵循
- C++ 常量正确性/缺少支持常量和非常量实例的类的常量构造函数
- 将函数赋值给函数指针,常量参数正确性
- C++ 函数参数或声明中的常量正确性
- 常量正确性编译错误到模板函数中的无效转换错误
- 功能调用,该函数从文本文件-C 检查输入正确性
- const对象和成员指针的const正确性,构造函数漏洞
- Getter函数的构造正确性
- 此函数和成员函数的恒定正确性
- 对于短内联函数,常量正确性是否重要
- 忽略C++复制构造函数的构造正确性
- Win32/pthreads线程函数上的volatile正确性
- 非实例化的c++模板函数的语义正确性
- 包含void*结构的函数的Const正确性和形参
- 影响正确性的move构造函数/赋值操作符示例
- Const正确性- Const指针作为函数实参
- c++中虚析构函数的使用(除析构顺序正确性外)
- 函数参数中的struct关键字,以及const正确性
- 返回shared_ptr<>的成员函数的常量正确性