2010-11-14 42 views
6

Possible Duplicate:
casting unused return values to voidC++ Mục đích của việc truyền là gì?

Tôi đọc một số mã nguồn, và ở trong đó nhiều chức năng ảo trong các lớp giao diện được khai báo và mặc định-thực hiện như vậy:

virtual bool FunctionName(TypeName* pointer) 
{ 
    (void)pointer; 
    return true; 
} 

Tôi có thể hỏi mục đích đúc con trỏ là gì để void trong việc thực hiện mặc định?

+2

Điều này không nên biên dịch, vì hàm cần trả về giá trị. –

+1

Điều đó đã được hỏi nhiều lần. Việc truyền nội dung nào đó tới 'void' cho biết bạn không sử dụng giá trị trả về. Trong trường hợp của bạn, đó là một no-op. – zneak

+0

@zneak: 'pointer' không phải là giá trị trả lại. Không phải là một câu hỏi của câu hỏi đó, mặc dù tôi chắc chắn rằng điều này đã được đề cập trước đó cho các tham số. –

Trả lời

18

Nhiều mục đích tùy thuộc vào những gì bạn đúc

  • Đánh dấu ý định trình biên dịch rằng một biểu thức đó là hoàn toàn một không-op được thiết kế như bằng văn bản (để ức chế cảnh báo, ví dụ)
  • Đánh dấu của bạn ý định tới trình biên dịch và lập trình viên rằng kết quả của một thứ gì đó bị bỏ qua (ví dụ như kết quả của một cuộc gọi hàm)
  • Trong mẫu hàm, nếu kiểu trả về được đưa ra bởi kiểu tham số mẫu T và bạn trả về kết quả của một số cuộc gọi hàm có thể khác với T trong một số trường hợp. Một diễn viên rõ ràng để T thể, trong trường hợp void, ngăn chặn một lỗi thời gian biên dịch:
    int f() { return 0; } void g() { return (void)f(); }
  • Ức chế trình biên dịch để lựa chọn một tình trạng quá tải toán tử dấu phẩy ((void)a, b sẽ không bao giờ gọi một chức năng điều hành dấu phẩy quá tải).

Lưu ý rằng tiêu chuẩn đảm bảo rằng sẽ không bao giờ là operator void() được gọi nếu bạn bỏ đối tượng lớp đến void (một số phiên bản GCC bỏ qua quy tắc đó).

12

Trong trường hợp này, chỉ để tránh cảnh báo của trình biên dịch về tham số không sử dụng.

+0

+1: để đưa ra câu trả lời đúng –

+0

Tại sao tạo tham số như vậy ngay từ đầu? – stackptr

+1

Tham số có thể xảy ra vì một số lớp khác cũng thực hiện chức năng ảo này thực sự sử dụng tham số đó. –

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