Const là gì – Hỏi Gì 247

Const trong C++    

  • Thống kê

Bài đăng này đã ko được update trong 2 nămNội dung chính

  • 1. Khái niệm
  • 2. Cách sử dụng
  • Sử dụng const với con trỏ:
  • Sử dụng const với hàm:
  • – Const với param của function:
  • – Const với trị giá trả về của hàm
  • Sử dụng const với class:
  • Tổng quát về const
  • const type (*/&) const name value;  

Const trong C++

Table of Contents

  • 1. Khái niệm
  • 2. Cách sử dụng
  • Tổng quát về const

1. Khái niệm

  • Const được sử dụng để khái niệm một hằng số trong chương trình.

2. Cách sử dụng

Cú pháp

Trong chương trình, lúc cần khai báo một biến với trị giá ko đổi trong trật tự chạy chương trình .

Cú pháp:

Bạn đang đọc: Const là gì

    const type name = value;

vd :

    const int age = 3;

-> Sử dụng từ khóa const với biến, coder sẽ ko cần chăm sóc tới việc biến hóa trị giá của biến nên sẽ rất thuận tiện trong việc sử dụng trị giá mà ko cần chăm sóc tại một vị trí nào đó, sẽ sở hữu người đổi khác trị giá của biến .

Sử dụng const với con trỏ:

Thông thường lúc sử dụng con trỏ, hoàn toàn sở hữu thể đổi khác trị giá của đối tượng người tiêu tiêu dùng trải qua con trỏ, hoặc biến hóa đối tượng người tiêu tiêu dùng mà nó trỏ tới. Tuy nhiên, trong nhiều trường hợp ko được cho phép điều này xảy ra. Từ khóa const được cho phép người tiêu dùng khái niệm một con trỏ mà ko hề đổi khác trị giá của đối tượng người tiêu tiêu dùng trải qua con trỏ, và một con trỏ nhất quyết và thắt chặt ( chỉ trỏ tới một đối tượng người tiêu dùng duy nhất ) .

  • Khái niệm con trỏ: trỏ tới đối tượng, trị giá của đối tượng sẽ ko được thay đổi bởi con trỏ (trong trường hợp chỉ cho phép thay đổi trị giá của biến lúc thao trực tiếp với biến):
    const int* pa = &a
	// (*pa)++; -> error!
	int const *pa = &a
	// (*pa)++; -> error!
    const string* pa = new string();
    string const *pa = new string();
  • Khái niệm con trỏ: con trỏ này trỏ tới một đối tượng duy nhất (coder sẽ ko cần quan tâm tới việc tại một vị trí nào đó lúc trong chương trình, con trỏ sẽ thay đổi đối tượng mà nó trỏ tới).
    int* const pa = &a
	// pa = &b -> error!
string* const pa = new string();

Lưu ý : trong trường hợp này cần chỉ ra đối tượng người tiêu tiêu dùng mà con trỏ trỏ tới lúc khai báo. Nến ko, con trỏ sẽ trỏ tới vùng nhớ mà máy tính cấp phép, liên hệ này sẽ ko được đổi khác trong trật tự chạy chương trình. Nên trị giá của con trỏ sẽ là trị giá tại liên hệ mà con trỏ được cấp phép -> ko dữ thế chủ động được trị giá cấp phép cho con trỏ .

  • Khái niệm một con trỏ: con trỏ này trỏ tới một đối tượng duy nhất, trị giá của đối tượng này sẽ ko bị thay đổi bởi con trỏ.
    const int * const pa = &a
	// (*pa)++; -> error!
	// pa = &b ->error!

-> Lúc sử dụng const với con trỏ, người tiêu dùng sẽ sở hữu ít yếu tố hơn phải chăm sóc ( sở hữu ko cần chăm sóc tới việc biến hóa trị giá của con trỏ hay đối tượng người tiêu tiêu dùng mà con trỏ sẽ trỏ tới ) việc này sẽ loại đi những trách nhiệm ko thiết yếu của con trỏ -> sẽ rất thuận tiện cho việc code, bảo dưỡng và sửa đổi code trong dự án Bất Động Sản .

Sử dụng const với hàm:

– Const với param của function:

Một hàm nếu muốn truyền tham chiếu tới một hằng const, lúc khai báo param cần khái niệm param được truyền vào là const :

	int sum(const int &a, int b){ return a+b; }
	int sum1(int &a, int b){ return a+b; }
	int main(){
		const int ca = 1;
		const int cb = 2;
		int a = 1, b = 2;
		cout << "sum: " << sum(a,b) << endl;
cout << "sum: " << sum(ca,cb) << endl;
cout << "sum: " << sum1(ca,b) << endl; //error!
return 0;		
	}

Giảng giải : lúc một biến được khai báo là const, thì trị giá tại liên hệ được khai báo là một hằng số. Trong lúc ở hàm được khai báo là liên hệ của một đối tượng người tiêu tiêu dùng hoàn toàn sở hữu thể đổi khác được trị giá. -> ko đúng thông số truyền vào hàm .Lưu ý : Lúc sử truyền một biến const vào một hàm :Đối với những biến tham trị trong hàm, sẽ ko cần khai báo const để truyền biến const vào hàm. Vì cơ bản biến tham trị sẽ ko làm biến hóa trị giá của biến truyền vào .

Xem thêm: Hypertension Là Gì Cũng Như Essential Hypertension Là Gì – Top Công Ty, địa điểm, Shop, Dịch Vụ Tại Bình Dương

Đối với những biến tham chiếu, lúc muốn truyền biến const vào hàm, cần khai báo const cho biến đó .

  • Trường hợp cần truyền một const vào một biến tham chiếu của hàm. Nhưng biến ko được khai báo const. Sử dụng từ khóa const_cast:
	int func(int &a){return (number += 100);}
	int main(){
		const int a = 5;
		int x = func(a); //-> error!
		int y = func(const_cast(x));
	}

-> Lưu ý : từ khóa const_cast được cho phép truyền một biến const vào hàm giống như một biến thường thì và trị giá của const sẽ được đổi khác như biến thông thường. Nhưng lúc kết thúc hàm lời gọi hàm, trị giá của const lại được trả về như cũ. Cần quan tâm tới việc sử dụng trị giá của biến const trong thân hàm .

– Const với trị giá trả về của hàm

  • Lúc khai báo const trị giá trả về của hàm.
const int func(){return count;}

int a = func();

-> Trong trường hợp này, hằng số const ko sở hữu công dụng vì, hàm trả về một trị giá ko đổi, trong lúc biến a chỉ nhận giá của hàm. Giống như việc gán trị giá của một hằng cho một biến .

	const int a = 8;
	int b = 8; //trị giá của b vẫn sở hữu thể thay đổi.
  • Lúc cần trả về một trị giá là hằng con trỏ:
const int* const func();

-> Thường được sử dụng trong class, lúc trị giá trả về của con trỏ là hằng số .Lưu ý : Trong trường hợp const ở sau dấu * :Từ khóa const đặt ở sau dấu * để bảo vệ rằng con trỏ được trả về sẽ chỉ trỏ tới 1 liên hệ duy nhất .Lúc kết thúc lời gọi hàm, con trỏ này sẽ bị hủy, trong lúc trị giá trả về của hàm là liên hệ ô nhớ mà con trỏ trỏ tới .-> Việc đặt const ở sau * trong trường hợp này là ko sở hữu ý nghĩa .

Sử dụng const với class:

  • Lúc khai báo một class const: những trị giá của class tại thời khắc khai báo sẽ ko bị thay đổi trong quá trình chạy trương trình.
	class test{
		private:
			int a;
		public:	
			void count(){ a++};	
	};
	int main{
		const test* t = new test();
		t->count(); //->error!
    }
  • Trong trường hợp muốn tạo class kiểu const, nhưng vẫn muốn một số trị giá sở hữu thể thay đổi, trong trường hợp này sở hữu thể sử dụng từ khóa “mutable”.
  • mutable là từ khóa được sử dụng để khái niệm một biến mà sở hữu thể thay đổi gián trị của biến này ngay cả lúc class được khai báo const.
	class test{
		private:
			mutable int a;
		public:	
			void count(){ a++};	
	};
	int main{
		const test* t = new test();
		t->count();
    }

Lưu ý: Từ khóa mutable sở hữu thể được sử dụng trong class, vì vậy lúc khai báo class const, cần rà soát xem những biến được khai báo mutable để sở hữu thể sử dụng chúng một cách hợp lý.

Xem thêm: Email là gì? Cách đăng ký, đăng nhập Email bằng Gmail đơn giản

  • Sử dụng “const” với hàm trong class: Lúc một hàm được khai báo const tại vị trí sau lúc khái niệm hàm, nó sở hữu thể được gọi trên bất kỳ loại đối tượng nào. Những hàm ko phải const chỉ sở hữu thể được gọi bởi những đối tượng ko phải const. Vd:
#include
using namespace std;

class Test {
int value;
public:
    	Test(int v = 0) {value = v;}

    	int get1() const {return value;}  
int get2(){ return value;}
};

int main() {
Test t1(20);
cout << t1.get1() << endl;
 	cout << t1.get2() << endl;

    	const Test t2(20);
    	cout << t2.get1() << endl;
	cout << t2.get2() << endl; // compile error!

    	return 0;
}

Giảng giải : class được khai báo const, trị giá của đối tượng người tiêu dùng của class sẽ ko bị biến hóa. Vì thế ko hề gọi tới một hàm ko phải hàm hàm hằng, vì trong trường hợp này hoàn toàn sở hữu thể sẽ làm biến hóa trị giá của những đối tượng người tiêu tiêu dùng trong class .Chú ý : Lúc khai báo class const thì những biến trong class vẫn được gọi như đối những class ko được khai báo const .Sử dụng từ khóa const để những biến thành viên của class được sử dụng trong hàm ko bị đổi khác .

#include

using namespace std;

class test{
	Private:
		int a = 5;
	Public:
		void countUp() const {
			a++; //->error!
		}
};

Tổng quát về const

const type (*/&) const name value;