Trong C ++, các tính năng như ngoại lệ ảnh hưởng đến toàn bộ chương trình của bạn: bạn có thể vô hiệu hóa chúng trong toàn bộ chương trình của mình hoặc bạn cần xử lý chúng trong toàn bộ mã của mình. Như một bài viết nổi tiếng trên Báo cáo C ++ đặt nó:
Theo trực giác, phần khó của các ngoại lệ mã hóa không phải là các cú ném và bắt rõ ràng. Phần thực sự khó khăn của việc sử dụng các ngoại lệ là viết tất cả các mã can thiệp theo cách mà một ngoại lệ tùy ý có thể truyền từ vị trí ném của nó sang trình xử lý của nó, đến nơi an toàn và không làm hỏng các phần khác của chương trình trên đường đi.
Vì thậm chí còn new
ném ngoại lệ, mọi hàm đều cần cung cấp an toàn ngoại lệ cơ bản - trừ khi nó chỉ gọi các hàm đảm bảo không ném ngoại lệ - trừ khi bạn vô hiệu hóa ngoại lệ hoàn toàn trong toàn bộ dự án của bạn .
Do đó, các trường hợp ngoại lệ là một tính năng "toàn chương trình" hoặc "toàn nhóm", vì mọi người trong nhóm phải sử dụng chúng. Nhưng không phải tất cả các tính năng của C ++ đều như vậy, theo như tôi biết.
Một ví dụ có thể là nếu tôi không nhận được các mẫu nhưng tôi không sử dụng chúng, tôi vẫn có thể viết đúng C ++ - hoặc tôi sẽ không?. Tôi thậm chí có thể gọi sort
một loạt các số nguyên và tận hưởng lợi thế tốc độ tuyệt vời của nó. C's qsort
(vì không có con trỏ hàm nào được gọi), mà không gặp rủi ro - hay không? Có vẻ như các mẫu không phải là "toàn đội".
Có các tính năng C ++ khác mà mã tác động không trực tiếp sử dụng chúng và do đó là "toàn bộ nhóm" không? Tôi đặc biệt quan tâm đến các tính năng không có trong C.
Cập nhật : Tôi đặc biệt tìm kiếm các tính năng không có dấu hiệu thực thi ngôn ngữ mà bạn cần biết về chúng. Câu trả lời đầu tiên tôi đã đề cập đến tính chính xác, cũng là toàn đội, do đó mọi người cần tìm hiểu về nó; tuy nhiên, AFAICS nó sẽ chỉ ảnh hưởng đến bạn nếu bạn gọi một hàm được đánh dấu const
và trình biên dịch sẽ ngăn bạn gọi nó trên các đối tượng không phải là const, vì vậy bạn có thể lấy thứ gì đó cho google. Với các ngoại lệ, bạn thậm chí không có được điều đó; hơn nữa, chúng luôn được sử dụng ngay khi bạn sử dụng new
, do đó các trường hợp ngoại lệ sẽ "quỷ quyệt" hơn. Vì tôi không thể diễn đạt điều này một cách khách quan, tuy nhiên, tôi sẽ đánh giá cao bất kỳ tính năng nào của toàn đội.
Cập nhật 2 : thay vì tính năng C ++, tôi nên viết một cái gì đó như "C ++ - tính năng cụ thể", để loại trừ những thứ như đa luồng áp dụng cho một lượng lớn ngôn ngữ lập trình chính thống.
Phụ lục: Tại sao câu hỏi này là khách quan (nếu bạn thắc mắc)
C ++ là một ngôn ngữ phức tạp, vì vậy nhiều dự án hoặc hướng dẫn mã hóa cố gắng chọn các tính năng C ++ "đơn giản" và nhiều người cố gắng đưa vào hoặc loại trừ một số tính năng theo tiêu chí chủ yếu. Các câu hỏi về điều đó được đóng lại thường xuyên ở đây trên SO.
Ở trên, thay vào đó, tôi đã xác định (chính xác nhất có thể) tính năng ngôn ngữ "toàn đội" là gì, cung cấp một ví dụ (ngoại lệ), cùng với bằng chứng hỗ trợ rộng rãi trong tài liệu về C ++ và yêu cầu các tính năng của cả nhóm trong C ++ ngoài trường hợp ngoại lệ.
Cho dù bạn nên sử dụng các tính năng "toàn đội" hay liệu đó có phải là một khái niệm có liên quan hay không, nhưng điều đó chỉ có nghĩa là tầm quan trọng của câu hỏi này là chủ quan, như mọi khi.