Site icon Nhạc lý căn bản – nhacly.com

Const là gì

Const trong C++    

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

Const trong C++

1. Định nghĩa

2. Cách sử dụng

Cú pháp

Trong chương trình, khi cần khai báo một biến với giá trị không đổi trong quy trình 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ẽ không cần chăm sóc tới việc biến hóa giá trị của biến nên sẽ rất thuận tiện trong việc sử dụng giá trị mà không cần chăm sóc tại một vị trí nào đó, sẽ có người biến hóa giá trị của biến .

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

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

    const int* pa = &a
	// (*pa)++; -> error!
	int const *pa = &a
	// (*pa)++; -> error!
    const string* pa = new string();
    string const *pa = new string();
    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 dùng mà con trỏ trỏ đến lúc khai báo. Nến không, con trỏ sẽ trỏ đến vùng nhớ mà máy tính cấp phép, địa chỉ này sẽ không được biến hóa trong quy trình chạy chương trình. Nên giá trị của con trỏ sẽ là giá trị tại địa chỉ mà con trỏ được cấp phép -> không dữ thế chủ động được giá trị cấp phép cho con trỏ .

    const int * const pa = &a
	// (*pa)++; -> error!
	// pa = &b ->error!

-> Khi sử dụng const với con trỏ, người dùng sẽ có ít yếu tố hơn phải chăm sóc ( có không cần chăm sóc tới việc đổi khác giá trị của con trỏ hay đối tượng người dùng mà con trỏ sẽ trỏ đến ) việc này sẽ loại đi những trách nhiệm không 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 đến một hằng const, khi khai báo param cần định nghĩa 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 

Giải thích : khi một biến được khai báo là const, thì giá trị tại địa chỉ được khai báo là một hằng số. Trong khi ở hàm được khai báo là địa chỉ của một đối tượng người dùng hoàn toàn có thể đổi khác được giá trị. -> không đúng tham số truyền vào hàm .Lưu ý : Khi 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ẽ không cần khai báo const để truyền biến const vào hàm. Vì cơ bản biến tham trị sẽ không làm biến hóa giá trị của biến truyền vào .

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

	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à giá trị của const sẽ được biến hóa như biến thông thường. Nhưng khi kết thúc hàm lời gọi hàm, giá trị của const lại được trả về như cũ. Cần quan tâm đến việc sử dụng giá trị của biến const trong thân hàm .

- Const với giá trị 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 không có tính năng vì, hàm trả về một giá trị không đổi, trong khi biến a chỉ nhận giá của hàm. Giống như việc gán giá trị của một hằng cho một biến .

	const int a = 8;
	int b = 8; //giá trị của b vẫn có thể thay đổi.
const int* const func();

-> Thường được sử dụng trong class, khi giá trị 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 địa chỉ duy nhất .Khi kết thúc lời gọi hàm, con trỏ này sẽ bị hủy, trong khi giá trị trả về của hàm là địa chỉ ô nhớ mà con trỏ trỏ đến .-> Việc đặt const ở sau * trong trường hợp này là không có ý nghĩa .

Sử dụng const với class:

	class test{
		private:
			int a;
		public:	
			void count(){ a++};	
	};
	int main{
		const test* t = new test();
		t->count(); //->error!
    }
	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 có thể được sử dụng trong class, vì vậy khi khai báo class const, cần kiểm tra xem các biến được khai báo mutable để có thể sử dụng chúng một cách hợp lý.

#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 

Giải thích : class được khai báo const, giá trị của đối tượng người tiêu dùng của class sẽ không bị biến hóa. Vì thế không hề gọi đến một hàm không phải hàm hàm hằng, vì trong trường hợp này hoàn toàn có thể sẽ làm biến hóa giá trị của những đối tượng người tiêu dùng trong class .Chú ý : Khi khai báo class const thì những biến trong class vẫn được gọi như đối những class không đượ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 không 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;  

Exit mobile version