Trong bài học trước – Giới thiệu về biến, chúng ta đã đề cập đến cách khai báo một biến mà chúng ta có thể sử dụng để lưu trữ các giá trị. Trong bài học này, chúng ta sẽ khám phá tiếp cách đặt, gán các giá trị vào các biến và sử dụng các giá trị đó.

int x; // define an integer variable named x
int y, z; // define two integer variables, named y and z

1. Gán giá trị cho biến

Sau khi một biến đã được khái báo, bạn có thể cung cấp cho nó một giá trị (trong một câu lệnh riêng) bằng cách sử dụng toán tử =. Quá trình này được gọi là gán giá trị.

int width; // define an integer variable named width
width = 5; // copy assignment of value 5 into variable width
 
// variable width now has value 5

Việc gán giá trị như trên chính là cách sao chép giá trị ở phía bên phải của toán tử = vào biến ở phía bên trái của toán tử. Toán tử = được gọi là toán tử gán.

Dưới đây, một ví dụ mà chúng ta sử dụng phép gán hai lần:

#include <iostream>
 
int main()
{
	int width;
	width = 5; // copy assignment of value 5 into variable width
 
	// variable width now has value 5
 
	width = 7; // change value stored in variable width to 7
 
	// variable width now has value 7
 
	return 0;
}

Khi chúng ta gán giá trị 7 cho biến width để nó thay đổi giá trị 5 trước đó và được ghi đè bằng 7. Các biến thông thường chỉ có thể giữ một giá trị tại một thời điểm.

Lưu ý

Một trong những lỗi phổ biến nhất mà các lập trình viên mới thường mắc phải là nhầm lẫn toán tử gán (=) với toán tử so sánh (==). Gán (=) được sử dụng để gán giá trị cho biến. Toán tử này (==) được sử dụng để kiểm tra xem hai toán hạng có bằng nhau về giá trị hay không.

2. Sao chép và khởi tạo giá trị trực tiếp

Một nhược điểm của phép gán là nó yêu cầu ít nhất hai câu lệnh: một để khai báo biến và một để gán giá trị cho biến đó.

Hai bước này có thể được kết hợp. Khi một biến được khai báo, bạn cũng có thể cung cấp một giá trị ban đầu cho biến đó tại ngay thời điểm khai báo đó. Điều này được gọi là khởi tạo.

C ++ hỗ trợ ba cách cơ bản để khởi tạo một biến. Đầu tiên, chúng ta có thể thực hiện sao chép bằng cách sử dụng dấu bằng(=):

int width = 5; // copy initialization of value 5 into variable width

Giống như gán, điều này sao chép giá trị ở phía bên phải của giá trị bằng với biến được tạo ở phía bên trái.

Thứ hai, chúng ta có thể thực hiện khởi tạo trực tiếp bằng cách sử dụng dấu ngoặc đơn.

int width( 5 ); // direct initialization of value 5 into variable width

Đối với các kiểu dữ liệu đơn giản (như số nguyên), sao chép và khởi tạo trực tiếp về cơ bản là giống nhau. Nhưng đối với một số loại nâng cao, khởi tạo trực tiếp có thể là cách tốt hơn so với khởi tạo bằng cách gán lại sau. Trước C ++ 11, khởi tạo trực tiếp được khuyến nghị so với khởi tạo lại sau trong hầu hết các trường hợp vì tăng hiệu suất.

3. Khởi tạo bằng dấu ngoặc nhọn

Thật không may, khởi tạo trực tiếp có thể được sử dụng cho tất cả các loại khởi tạo (chẳng hạn như khởi tạo một đối tượng với một danh sách dữ liệu). Trong việc cung cấp một cơ chế khởi tạo phù hợp hơn, C ++ 11 đã thêm một cú pháp mới gọi là khởi tạo dấu ngoặc (đôi khi còn được gọi là khởi tạo thống nhất hoặc khởi tạo danh sách) sử dụng dấu ngoặc nhọn.

Khởi tạo đó có hai dạng:

int width{ 5 }; // direct brace initialization of value 5 into variable width (preferred)
int height = { 6 }; // copy brace initialization of value 6 into variable height

Hai hình thức này hoạt động gần như giống hệt nhau, nhưng hình thức gán trực tiếp thường được ưa thích hơn.

Khởi tạo một biến với dấu ngoặc rỗng khi muốn khởi tạo giá trị bằng không.

int width{}; // zero initialization to value 0

Khởi tạo ngoặc nhọn có thêm lợi ích từ việc không cho phép chuyển đổi kiểu của giá trị đang gán với kiểu hiện tại của biến. Điều này có nghĩa là nếu bạn cố gắng sử dụng dấu ngoặc để khởi tạo một biến có giá trị mà nó không phù hợp với kiểu của biến đó thì trình biên dịch sẽ đưa ra cảnh báo hoặc lỗi. Ví dụ:

int width{ 4.5 }; // error: an integer variable can not hold a non-integer value

Trong đoạn trích trên, chúng ta đang cố gắng gán một số (4.5) có một phần phân số (phần 0,5) cho một biến số nguyên (chỉ có thể giữ các số mà không có các phần phân số). Sao chép và khởi tạo trực tiếp sẽ bỏ phần phân số, dẫn đến khởi tạo giá trị width bằng 4. Tuy nhiên, khởi tạo với dấu ngoặc sẽ khiến trình biên dịch gặp lỗi (nói chung là một điều tốt, vì mất dữ liệu hiếm khi được mong muốn).

Mẹo

Ưu tiên khởi tạo trực tiếp bằng dấu ngoặc bất cứ khi nào có thể.

Bài tập C++ về Biến và Kiểu dữ liệu

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!