Tôi đang sử dụng Visual Studio 2008.Làm thế nào để làm cho std :: operator vector của [] biên dịch làm giới hạn kiểm tra trong DEBUG nhưng không phải trong CHÍ
Tôi biết rằng std :: vector có giới hạn kiểm tra với tại() chức năng và có hành vi không xác định nếu bạn cố gắng truy cập một cái gì đó bằng cách sử dụng toán tử [] không chính xác (ngoài phạm vi).
Tôi rất tò mò nếu có thể biên dịch chương trình của tôi với kiểm tra giới hạn. Bằng cách này, toán tử [] sẽ sử dụng hàm at() và ném một std :: out_of_range bất cứ khi nào một cái gì đó nằm ngoài giới hạn.
Chế độ phát hành sẽ được biên dịch mà không có giới hạn kiểm tra cho toán tử [], do đó hiệu suất không bị suy giảm.
Tôi đã suy nghĩ về điều này vì tôi đang di chuyển một ứng dụng được viết bằng Borland C++ sang Visual Studio và trong một phần nhỏ của mã tôi có (với i = 0, j = 1):
v[i][j]; //v is a std::vector<std::vector<int> >
Kích thước của vectơ 'v' là [0] [1] (vì vậy phần tử 0 của vectơ chỉ có một phần tử). Đây là hành vi không xác định, tôi biết, nhưng Borland đang trở về 0 ở đây, VS đang gặp sự cố. Tôi thích vụ tai nạn tốt hơn là trả về 0, vì vậy nếu tôi có thể nhận thêm 'sự cố' bởi std :: out_of_range ngoại lệ bị ném, việc di chuyển sẽ được hoàn thành nhanh hơn (vì vậy nó sẽ tiết lộ nhiều lỗi mà Borland đang ẩn).
+1 Hoàn hảo. Bạn sẽ tìm ra những thứ như tên mới ở đâu? Chỉ cần nhìn vào các tập tin tiêu đề mới? – GManNickG
chỉ được cập nhật với một số thông tin khác – jalf
Cảm ơn bạn! [15char] – GManNickG