2015-05-05 17 views
7

Khi tôi sử dụng (gần đây đã phát hành) Cppcheck 1.69 trên mã của tôi 1, nó cho thấy rất nhiều thư mà tôi mong đợi không ;-) Vô hiệu hóa noExplicitConstructor chứng minh rằng tất cả chúng đều thuộc loại này.Tôi có nên thực sự ồ ạt giới thiệu từ khóa rõ ràng không?

Nhưng tôi thấy rằng tôi không phải là người duy nhất với rất nhiều thông điệp Cppcheck mới, nhìn vào kết quả phân tích của LibreOffice (mà tôi có thể hiển thị ở nơi công cộng):

enter image description here

Lập trình viên có kinh nghiệm sẽ làm gì:

  • Ngăn chặn séc?
  • Giới thiệu rộng rãi từ khóa explicit?

1Edit: Đây là khóa học không mã của tôi nhưng mã tôi phải làm việc trên, nó là mã cũ: một kết hợp của C và C++ trong một số (trước) hương vị tiêu chuẩn, và đó là một cơ sở mã khá lớn.

+6

Một lập trình viên có kinh nghiệm đã sử dụng 'tường minh' ở nơi cần thiết và bỏ qua nó khi cần chuyển đổi ngầm định. – juanchopanza

+15

Tôi không thể nói cho các lập trình viên khác (có kinh nghiệm hay cách khác), nhưng tôi muốn sử dụng 'tường minh' trừ khi tôi đặc biệt muốn cho phép chuyển đổi ngầm. Nó làm giảm phạm vi cho những bất ngờ. –

+0

@juanchopanza Tôi bắt đầu sử dụng 'tường minh' trong mã mới, nhưng tôi có nên làm lại mã cũ sau đề xuất này của một công cụ không? – Wolf

Trả lời

8

Tôi đã bị cắn trong quá khứ bởi các lần truy cập hiệu suất được giới thiệu bởi các chuyển đổi tiềm ẩn cũng như các lỗi hoàn toàn. Vì vậy, tôi có xu hướng luôn sử dụng explicit cho tất cả các nhà xây dựng mà tôi không muốn tham gia vào chuyển đổi tiềm ẩn để trình biên dịch có thể giúp tôi nắm bắt lỗi của mình - và sau đó tôi luôn cố gắng thêm chú thích "// ngầm định" các ctors nơi tôi rõ ràng có ý định cho họ được sử dụng như chuyển đổi ctors ngầm. Tôi thấy rằng điều này giúp tôi viết mã chính xác hơn với ít bất ngờ hơn.

… Vì vậy, tôi muốn nói "vâng, hãy thêm explicit" - về lâu dài bạn sẽ vui vì bạn đã làm - đó là những gì tôi đã làm khi lần đầu tiên tôi biết về điều đó và tôi rất vui vì tôi đã làm.

+1

Cảm ơn bạn đã xem xét điều này. BTW: cppcheck sẽ vẫn cảnh báo về nó nếu bạn chỉ sử dụng một bình luận. Như để vô hiệu hóa các cảnh báo của nó, tôi sử dụng các biện pháp triệt tiêu nội tuyến, vì vậy tôi có một nhận xét chức năng về các chuyển đổi tiềm ẩn cố ý. (câu trả lời yêu thích của tôi cho đến nay ;-)) – Wolf

Các vấn đề liên quan