Giá trị trả về (return)
Câu lệnh return kết thúc việc thực thi hàm và trả về một giá trị cho nơi đã gọi hàm.
Cú pháp cơ bản
Phần tiêu đề “Cú pháp cơ bản”#include <iostream>
int square(int x) { return x * x; // Trả về giá trị, kết thúc hàm ngay lập tức}
int main() { int result = square(5); std::cout << result << std::endl; // 25 return 0;}Kiểu trả về phải khớp với khai báo
Phần tiêu đề “Kiểu trả về phải khớp với khai báo”int get_age() { return 20; // OK // return "20"; // LỖI BIÊN DỊCH - không thể trả về chuỗi cho hàm khai báo trả về int}Nếu giá trị trả về có kiểu khác nhưng chuyển đổi được, C++ sẽ tự động ép kiểu:
double get_price() { return 100; // int 100 được tự động chuyển thành double 100.0}return kết thúc hàm ngay lập tức
Phần tiêu đề “return kết thúc hàm ngay lập tức”Code sau return (trong cùng nhánh thực thi) sẽ không bao giờ chạy:
int check_number(int n) { if (n > 0) { return 1; // Hàm kết thúc ngay tại đây nếu n > 0 } if (n < 0) { return -1; } return 0; // Chỉ chạy đến đây nếu n == 0}Nhiều điểm return trong một hàm
Phần tiêu đề “Nhiều điểm return trong một hàm”Hoàn toàn hợp lệ khi hàm có nhiều điểm return ở các nhánh khác nhau:
std::string classify_age(int age) { if (age < 13) { return "Thieu nhi"; } else if (age < 20) { return "Thieu nien"; } else if (age < 60) { return "Nguoi lon"; } else { return "Nguoi cao tuoi"; }}Hàm không có return (kiểu void)
Phần tiêu đề “Hàm không có return (kiểu void)”Hàm khai báo kiểu void không bắt buộc phải có return - nếu có, chỉ dùng return; (không kèm giá trị) để thoát hàm sớm:
void print_positive(int n) { if (n <= 0) { std::cout << "So khong hop le" << std::endl; return; // Thoát hàm sớm, không kèm giá trị } std::cout << "So duong: " << n << std::endl;}Trả về nhiều giá trị
Phần tiêu đề “Trả về nhiều giá trị”Một hàm C++ chỉ có thể trả về một giá trị. Để trả về nhiều giá trị cùng lúc, có thể dùng std::pair, std::tuple, hoặc struct:
#include <iostream>#include <utility> // std::pair
std::pair<int, int> min_max(int a, int b, int c) { int mn = std::min({a, b, c}); int mx = std::max({a, b, c}); return {mn, mx}; // Trả về cặp giá trị}
int main() { auto result = min_max(5, 2, 9); std::cout << "Min: " << result.first << ", Max: " << result.second << std::endl; return 0;}Tổng kết
Phần tiêu đề “Tổng kết”return giá_trị;kết thúc hàm ngay lập tức và trả về giá trị cho nơi gọi- Kiểu giá trị trả về phải khớp (hoặc chuyển đổi được) với kiểu khai báo của hàm
- Hàm
voidkhông bắt buộc córeturn, nhưng có thể dùngreturn;để thoát sớm - Muốn trả về nhiều giá trị, dùng
std::pair,std::tuple, hoặcstruct