30/09/2018, 18:24

Từ khóa const nằm cuối khai báo hàm có tác dụng gì?

mọi người trong dạy nha học cho em hỏi trường hợp từ khóa const trong C++ chút ạ,
nếu trong câu lệnh

const int x =2;

thì em có thể hiểu được chức năng của anh const
nhưng nếu như trong câu lệnh này thì anh const có ý nhĩa gì ạ

 void pack_k_bits::pack_rev(unsigned char *bytes, const unsigned char *bits, int nbytes) const
{
....
}

em cảm ơn nhiều ạ

viết 20:33 ngày 30/09/2018

const ở cuối cùng nghĩa là phương thức pack_rev của lớp pack_k_bits sẽ ko làm thay đổi các thuộc tính của đối tượng gọi phương thức này. Hay nói cách khác nếu ko có const này thì

// ko có const ở cuối
void pack_k_bits::pack_rev(...) //const
...

const pack_k_bits p = ...;
p.pack_rev(...); //ko gọi được
Ngọa Thiên Long viết 20:38 ngày 30/09/2018

thank @tntxtnt , nhưng nếu mình không viết const ở cuối nhưng mình vẫn gọi hàm đó ra

x = pack_rev( ...); 

liệu kết qủa có khác gì không ạ
trong hàm mà có const ở cuối như thế thì vẫn dùng được các câu lệnh điều kiện if else không anh nhỉ

viết 20:35 ngày 30/09/2018

được, miễn đừng gán phần tử của class là được.

vd

class T
{
public:
  void abc()const
  {
    if (this->n > 0) ...
    else if (this->n / 2 ...) ....

    this->n = ... // cái này ko được, làm thay đổi giá trị của n.
  }
private:
  int n;
};

có thể hiểu là con trỏ this bình thường nếu ko có const ở cuối phương thức thì có kiểu là T * (thực ra là T * const thì đúng hơn, là con trỏ cố định ko thay đổi địa chỉ nó trỏ tới được), còn có const ở cuối thì có kiểu là const T *

phương thức nào cũng để const ở cuối hết đi, gặp lỗi thì bỏ nó ra, vậy đi cho đơn giản
.
.
.
.

Ngọa Thiên Long viết 20:30 ngày 30/09/2018

phương thức nào cũng để const ở cuối hết đi, gặp lỗi thì bỏ nó ra, vậy đi cho đơn giản

vầy thì không để có hơn không ạ
e nghe a nói thì có thể hiểu là : các phương thức trong hàm abc() thì đều là không đổi, nên nếu bên ngoài hàm mình lại thay đổi các gía trị của các biến trong hàm này thì sẽ bị lỗi.

Bài liên quan
0