Từ khóa auto trong C++11.(The auto keyword)

Khóa học lập trình C++ căn bản

5.0 (8 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 11:50 28-08-2020 78.708 lượt xem 5 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

Từ khóa auto trong C++11.(The auto keyword)

Dẫn nhập

Ở bài học trước, mình đã chia sẻ cho các bạn về CÁC THAO TÁC TRÊN MẢNG KÝ TỰ (C-style strings) trong C++.

Hôm nay, mình sẽ giới thiệu cho các bạn về Từ khóa auto trong C++11 (The auto keyword), một từ khóa khá hữu ích trong lập trình C++.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về:

Trong bài ta sẽ cùng tìm hiểu các vấn đề:

  • Từ khóa auto trước C++11 (C++98/C++03)
  • Từ khóa auto từ C++11
  • Kiểu trả về của hàm với từ khóa auto từ C++14

Từ khóa auto trước C++11 (C++98/C++03)

Trong bài BIẾN CỤC BỘ trong C++ (Local variables), bạn đã biết được biến cục bộ thời gian tự động, có nghĩa là chúng được tạo tại thời điểm định nghĩa, và bị hủy khi ra khỏi khối lệnh mà biến đó được định nghĩa.

Trước khi phiên bản C++11 ra đời, từ khóa auto là từ khóa ít được sử dụng nhất trong C++. Nó được sử dụng để xác định 1 biến có thời gian tự động.

#include <iostream>
using namespace std;

int main()
{
	// xác định rõ ràng nKteam1 là 1 biến cục bộ
	auto int nKteam1(38); // trước phiên bản C++11

	// mặc định đã là biến cục bộ
	int nKteam2(38); // ý nghĩa tương tự câu lệnh trên

	return 0;
}

Tuy nhiên, trình biên dịch có thể tự động biết được một biến có phạm vi cục bộ hay toàn cục. Vì vậy, từ phiên bản C++11 trở về sau, sử dụng từ khóa auto để xác định phạm vi của biến là không cần thiết, nên chức năng này đã bị loại bỏ.


Từ khóa auto từ phiên bản C++11

Khai báo biến với từ khóa auto

Từ phiên bản C++11 trở về sau, ý nghĩa của các từ khóa auto đã thay đổi, nó trở thành 1 từ khóa khá hữu ích thường được sử dụng trong C++.

Xét các câu lệnh bên dưới:

char cKteam = 'K';
int nKteam = 1;
float fKteam = 1.0F;
double dKteam = 1.0;

Với các câu lệnh trên, bạn phải xác định kiểu dữ liệu của biến được khai báo.

Tuy nhiên, C++ có thể xác định kiểu dữ liệu của giá trị khởi tạo (‘K’: char, 1: int, 1.0F: float, 1.0: double). Vậy tại sao bạn phải xác định kiểu dữ liệu cho biến, trong khi compiler có thể xác định kiểu dữ liệu cho biến đó thông qua giá trị khởi tạo?

Từ phiên bản C++11 trở về sau, từ khóa auto được dùng để tự động nhận dạng kiểu dữ liệu thông qua kiểu dữ liệu của giá trị khởi tạo ra nó.

auto cKteam = 'K'; // 'K' là kiểu char => cKteam kiểu char
auto nKteam = 1; // 1 là kiểu int => nKteam kiểu int
auto fKteam = 1.0F; // 1.0F là kiểu float => fKteam kiểu float
auto dKteam = 1.0; // 1.0 là kiểu double => dKteam kiểu double

Bạn có thể xem kiểu dữ liệu của biến khi sử dụng từ khóa auto thông qua hàm typeid().name().

#include <iostream>
using namespace std;

int main()
{
// 'K' là kiểu char => cKteam kiểu char
	auto cKteam = 'K';
	cout << "type of cKteam: " << typeid(cKteam).name() << endl;

// 1 là kiểu int => nKteam kiểu int
	auto nKteam = 1;
	cout << "type of nKteam: " << typeid(nKteam).name() << endl;

	// 1.0F là kiểu float => fKteam kiểu float
	auto fKteam = 1.0F;
	cout << "type of fKteam: " << typeid(fKteam).name() << endl;

	// 1.0 là kiểu double => dKteam kiểu double
	auto dKteam = 1.0;
	cout << "type of dKteam: " << typeid(dKteam).name() << endl;

	return 0;
}

Output:

Từ khóa auto trong C++11.(The auto keyword)

Từ khóa auto có thể được dùng cho giá trị trả về của 1 hàm:

#include <iostream>
using namespace std;

int add(int a, int b)
{
	return a + b;
}

int main()
{
	// hàm add() return kiểu int => biến sum kiểu int
	auto sum = (3, 8);
cout << "type of sum: " << typeid(sum).name() << endl;

	return 0;
}

Chú ý: Biến bắt buộc phải có giá trị khởi tạo khi sử dụng từ khóa auto.

Đối với những kiểu dữ liệu cơ bản, có thể bạn thấy từ khóa auto này chưa cần thiết. Trong tương lai, bạn sẽ gặp những kiểu dữ liệu khá phức tạpdài dòng, lúc này sử dụng từ khóa auto sẽ tiết kiệm thời gian, và giúp code trở nên đẹp hơn.


Từ khóa auto không thể sử dụng làm tham số hàm

Từ khóa auto không thể sử dụng làm tham số hàm:

int add(auto a, auto b)
{
	return a + b;
}

Chú ý: từ khóa auto xác định kiểu dữ liệu tại thời gian biên dịch, nên nó không được sử dụng cho tham số hàm.

Nếu bạn muốn viết 1 hàm thực hiện trên nhiều kiểu dữ liệu khác nhau, bạn có thể sử dụng khuôn mẫu hàm (function template). Chi tiết sẽ được hướng dẫn trong bài KHUÔN MẪU HÀM TRONG C++ (Function templates).


Trailing return type syntax in C++11

C++11 hỗ trợ khai báo hàm sử dụng cú pháp trailing return type. Trong trường hợp này, từ khóa auto không dùng để xác định kiểu dữ liệu tự động, nó chỉ là 1 phần của cú pháp.

Hai cách khai báo hàm bên dưới là như nhau:

int add(int a, int b);
auto add(int a, int b) -> int;

Cú pháp trailing return type về cơ bản sẽ giúp code của bạn trở nên dễ học hơn, ngoài ra nó còn được sử dụng với từ khóa decltype, lambda expression, và nhiều tính năng khác trong những phiên bản C++14/C++17. Những tính năng này sẽ được hướng dẫn sau.


Kiểu trả về của hàm với từ khóa auto từ C++14

Từ phiên bản C++14, từ khóa auto có thể dùng để tự động xác định kiểu trả về của hàm.

#include <iostream>
using namespace std;

// a + b có kiểu int => hàm add() kiểu int
auto add(int a, int b)
{
	return a + b;
}

int main()
{
	// hàm add() return kiểu int => biến sum kiểu int
	auto sum = (3, 8);
	cout << "type of sum: " << typeid(sum).name() << endl;

	return 0;
}

ab có kiểu int, nên hàm add() sẽ có kiểu trả về là int.


Kết luận

Qua bài học này, bạn đã biết được cách thức hoạt động Từ khóa auto trong C++11 (The auto keyword).

Trong bài tiếp theo, mình sẽ giới thiệu cho các bạn VÒNG LẶP FOR EACH TRONG C++11 (For each loops).

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Từ khóa auto trong C++11.(The auto keyword) dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Khóa học

Khóa học lập trình C++ căn bản

Hiện nay, C++ đã là cái tên rất quen thuộc trong ngành lập trình. Mặc dù C++ là ngôn ngữ lập trình đã ra đời khá lâu, nhưng không phải ai cũng có cơ hội để tìm hiểu về nó.

Vì vậy, Kteam đã xây dựng lên khóa học LẬP TRÌNH C++ CĂN BẢN để cung cấp một lượng kiến thức về ngôn ngữ C++ nói riêng, và các khái niệm khác trong lập trình nói chung.

Nội dung khóa học sẽ được phân tách một cách chi tiết, nhằm giúp các bạn dễ hiểu và thực hành được ngay. Serial dành cho những bạn chưa có bất kỳ kiến thức gì về lập trình, hoặc những bạn mất căn bản muốn lấy lại kiến thức nền tảng lập trình, cụ thể là C++.

Đánh giá

win1702 đã đánh giá 21:34 17-07-2024

quydeptrai đã đánh giá 09:49 08-08-2023

:V :V :V :V :V

Tien Dung đã đánh giá 08:27 28-09-2021

Lê Hoàng Nguyên đã đánh giá 09:42 09-08-2021

nguyen dinh thang đã đánh giá 14:08 29-07-2021

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
m0nterss đã bình luận 09:37 20-12-2023

fun fact: từ C++20 trở đi, C++ cho phép người dùng dùng từ khóa auto ngay trong tham số hàm - nó tương đương với dùng template

hop.duclai đã bình luận 12:13 15-09-2022

hay quá mèn đét ơi

 

hung148148 đã bình luận 15:04 08-01-2021

a này giảng dễ hiểu quá

 

dogkjte đã bình luận 09:31 09-07-2018

từ bài này ad ko làm video hướng dẫn nữa ạ

Không có video.