Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Return từ hàm void trong C++

Hàm void không trả về giá trị, nhưng câu lệnh return vẫn hợp lệ và hữu ích.

1. return; – Thoát sớm khỏi hàm

Dùng để kết thúc hàm trước khi chạy hết thân hàm, tăng readability.

void process(int x) {
    if (x < 0) return; // guard clause
    // xử lý x >= 0
    cout << "Processing " << x << endl;
}

2. return expr; – expr phải là void

Có thể return một biểu thức kiểu void – ví dụ gọi hàm void khác:

void logError() { cerr << "Error!\n"; }
void handle() {
    if (error) return logError(); // OK: logError() trả void
}

3. Lambda void trả về void expression

auto lambda = []() -> void {
    if (cond) return;
    return []{ cout << "done\n"; }(); // gọi lambda void khác
};

4. Template và decltype

template<typename F>
auto wrapper(F f) -> decltype(f()) { // C++14 return type deduction
    return f(); // OK nếu f() trả void
}

Ví dụ tổng hợp

#include <iostream>
using namespace std;

void cleanup() { cout << "Cleanup\n"; }

void process(int id) {
    if (id <= 0) {
        cout << "Invalid ID\n";
        return; // thoát sớm
    }
    cout << "Processing " << id << endl;
    return cleanup(); // gọi void func khác rồi return
}

int main() {
    process(1);  // Processing 1 \n Cleanup
    process(-1); // Invalid ID
    return 0;
}

Kết quả

Processing 1
Cleanup
Invalid ID

Lưu ý

  • return 0; trong hàm void → lỗi compile.
  • return nullptr; cũng lỗi (nullptr không phải void).
  • C++11: void_t trait hỗ trợ SFINAE với void expression.