2009-03-25 2 views

Trả lời

41

Bạn nhận được hành vi không xác định - bạn cần kiểm tra xem vùng chứa có chứa nội dung nào đó trống không() (kiểm tra xem vùng chứa có trống không) trước khi gọi hàm front().

+0

Bạn cũng có thể sử dụng trống(). –

+1

Tôi ước họ đã cụ thể hơn khi họ thiết kế và chỉ định STL. Tôi nghĩ rằng một số lượng lớn các vấn đề và lỗi trong quá trình chuyển đổi C++ được gây ra bởi việc triển khai nền tảng-specifing của những "hành vi không xác định" này được khai thác bởi các lập trình viên không tốt. –

+0

Quyết định làm một cái gì đó UB thường có nghĩa là có một số chi phí thay thế - trong trường hợp này ném một ngoại lệ, mà C++ luôn cố gắng tránh. –

12

Bạn nhận được hành vi không xác định.

Để kiểm tra phạm vi sử dụng tại (0). Nếu điều này không thành công, bạn sẽ nhận được ngoại lệ out_of_range.

1

Hành vi không xác định

1

Bạn luôn phải chắc chắn vùng chứa của mình không trống trước khi gọi trước() trong trường hợp này. Gọi trống() như một nhân viên bảo vệ an toàn là tốt. Tất nhiên, tùy thuộc vào thiết kế chương trình của bạn, luôn luôn có một thùng chứa không có sản phẩm nào có thể là một tuyên bố bất biến cho phép bạn ngăn chặn và lưu các cuộc gọi để trống() mỗi khi bạn gọi phía trước(). Quay trở lại (hoặc ít nhất là trong một số phần của mã của bạn?)

Nhưng như đã nêu ở trên, nếu bạn muốn tránh hành vi không xác định trong chương trình của mình, hãy biến nó thành một bất biến mạnh.

2

Có, bạn có thể sử dụng 'at' như Graham được đề cập thay vì sử dụng mặt trước.

Nhưng, tại (0) chỉ có sẵn cho một số vùng chứa - vectơ, deque và không dành cho người khác - danh sách, hàng đợi, ngăn xếp. Trong những trường hợp này, bạn đã quay trở lại sự an toàn của kiểm tra 'trống'.