gpt4 book ai didi

c++ - 常量成员函数如何以这种形式工作?

转载 作者:行者123 更新时间:2023-11-28 02:55:40 25 4
gpt4 key购买 nike


我想知道常量成员函数在这种情况下究竟是如何工作的...

自定义数组类:

class Array
{
private:
int m_size;
int *m_ptr;

// Utility function
void set_size( int size ); // Set size of array

public:
// Constructors
Array( int array_size ); // Default constructor
Array( const Array &copy_array ); // Copy constructor

// Destructor
~Array() { delete [] m_ptr; };

int get_size() const { return m_size; }; // Get size of array

// Overloaded Operators
const Array &operator=( const Array &rhs );
}


const Array &Array::operator=( const Array &rhs )
{
if( this != &rhs )
{
if( this -> get_size() != rhs.get_size() )
{
delete [] m_ptr;
set_size( rhs.get_size() );
m_ptr = new int[ get_size() ];
}

for( int i = 0; i < get_size(); i++ )
{
this -> m_ptr[i] = rhs.m_ptr[i];
}
}

return *this;
}

我想知道重载的“=”运算符如何与首先声明常量一起工作?因为成员函数确实改变了当前对象的值。如果您正在使用此功能,则只要当前对象本身不是常量,就可以在赋值后更改对象的值。所以我想知道这样声明函数常量有什么意义?

最佳答案

有一种观点认为 operator= 应该返回一个 const 引用,以防止像 (a = b) = c 这样的代码被编译。这种观点在 C++ 的早期更为普遍,因为 C 不允许这种构造,而人们希望 C++ 以相同的方式运行。现在这种情况并不常见。

关于c++ - 常量成员函数如何以这种形式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053710/

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