cuốn sách gpt4 ai đã làm

Sự khác biệt giữa lối ra và std::exit trong C++ là gì?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:05:26 31 4
mua khóa gpt4 Nike

ra và trong C++ std::thoát Sự khác biệt là gì? Tôi đã nghiên cứu nó nhưng tôi không thể tìm thấy bất cứ điều gì.

Sự khác biệt giữa hai mã này là gì:

1:

if(SDL_Init(SDL_INIT_EVERYTHING) != 0)
{
std::cout << "Lỗi: Không thể khởi tạo SDL \n";
thoát (EXIT_FAILURE);
}

2:

if(SDL_Init(SDL_INIT_EVERYTHING) != 0)
{
std::cout << "Lỗi: Không thể khởi tạo SDL \n";
std::exit(EXIT_FAILURE);
}

câu trả lời hay nhất

Chúng là hai tên cho cùng một chức năng và có cùng chức năng.

Nhưng xin lưu ý rằng trong C++ std::thoát/ra (bất kể bạn lấy tên như thế nào) thực sự có một số ra hành vi quy định. Trong thư viện C. đặc biệt,

  1. raĐầu tiên hãy hủy tất cả các đối tượng có thời lượng lưu trữ luồng được liên kết với luồng hiện tại.
  2. Các đối tượng có thời lượng lưu trữ tĩnh sẽ bị hủy và mọi mục đích sử dụngatexitChức năng đã đăng ký được gọi.
    • Nếu một trong số họ ném ra một ngoại lệ chưa được phát hiện,chấm dứtđược gọi.
  3. Sau đó chúng ta có hành vi C bình thường:
    • Nếu có dữ liệu chưa được ghi, luồng C đang mở sẽ bị xóa và sau đó đóng lại.
    • Bằng cách gọi tmpfile Tập tin đã tạo sẽ bị xóa.
    • Điều khiển được trả về môi trường máy chủ, trả về thành công hay thất bại tùy theo lệnh gọira Giá trị được truyền khi (0 hoặc EXIT_SUCCESS => Thành công,EXIT_FAILURE => không thành công, mọi điều khác đều được xác định khi triển khai).

Đặc biệt chú ý đến các đối tượng địa phương不会Bị phá hủy bởi bất kỳ lệnh thoát nào.

Điều này có nghĩa là, trên thực tế, bạn thực sự nên quên tất cả những điều trên vàkhông bao giờgọi ra/std::thoátTừ mã C++. Mặc dù ủy ban tin tưởng rõ ràng rằng khả năng tương thích với mã C là需要Có rất nhiều động lực để giữ nó ở mức tiêu chuẩn, nhưng bạn chắc chắn không cần sử dụng nó - và trong hầu hết mọi tình huống khá bình thường, bạn không nên sử dụng nó. Phá hủy các đối tượng cục bộ khi thoát khỏi phạm vi là một phần rất quan trọng của C++, như ra Chức năng loại bỏ bảo đảm này gần như sẽ chỉ khiến bạn đau đầu.

Nếu bạn cần liên lạc với ra Đối với hành vi gần giống nhau, bạn thường muốn làm điều gì đó như thế này:

struct my_exit : public std::Exception { 
giá trị int;
my_exit(int value): value(value) {}
};

int chính() {
thử {
// làm những việc bình thường
}

bắt(my_exit const &e) {
trả về giá trị điện tử;
}
}

Sau đó, trong phần còn lại của mã, nếu không bạn sẽ gọi ra , thay vào đó bạnném my_exit(anything_value); .Theo cách này, tất cả các biến cục bộ sẽ bị hủy (tức là, việc giải phóng ngăn xếp sẽ xảy ra),Sau đóBạn sẽ thoát khỏi môi trường một cách duyên dáng.

Giới thiệu về c++ - Sự khác biệt giữa exit và std::exit trong C++ là gì? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/38724788/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress