FangLin Game Dev Engineer

C++之const相关

2022-10-24
FangLin
C++

const指针相关

e.g. compile error

const T *p;
T *q = p;

函数重载与const相关

  • 重复声明错误:
    void function(T); void function(const T);
    void function(T*); void function(T* const);
    
  • 正确的重载:
    void function(T*); void function(const T*);
    void function(T&); void function(const T&);
    

使用const_cast在非const函数中调用const函数

e.g.

#include <iostream>
using namespace std;
class A {
    string a;
public:

    A(string _a) :a(_a) {};
    const char& operator[](size_t position) const
    {
        cout << "const function" << endl;
        return a[position];
    }
    char& operator[](size_t position)
    {
        cout << "modifiable function" << endl;
        return const_cast<char&>(static_cast<const A&>(*this)[position]);
    }
};
int main()
{
    A s("test string");
    cout << s[2] << endl;
    const A s2("test string");
    cout << s2[2] << endl;
    return 0;
}

output:

modifiable function
const function
s
const function
s

为什么不能在const对象中调用非const函数

非const对象的this的类型类似于T* const,即所谓的“顶层”const。因此可以调用const和非const函数(可以隐式转换为const T* const); 而const对象的this类型const T* const无法隐式转换为T* const,所以无法调用非const函数;


Similar Posts

Comments