2009-02-27 14 views
11

Bất cứ ai có thể cho tôi biết diễn viên này có hiệu lực không (ngoài việc thiết lập happyNumber thành 1337), nếu có, và nếu nó không có hiệu ứng khác, làm cách nào tôi có thể viết mã như thế này ??? Đây có phải là lỗi trình biên dịch hay một số tính năng ẩn của C++ không?Có gì với static_cast với nhiều đối số?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337); 

Tôi rất ngạc nhiên vì điều này sẽ biên dịch. Tôi tìm thấy nó thông qua một lỗi mà tôi vô tình thiết lập tham số thứ hai cho một cái gì đó mà có nghĩa là để đi trong một cuộc gọi chức năng của biểu thức được đúc. Điều này dẫn đến một lỗi khó chịu khi đối tượng được truyền từ tham số thứ hai, gọi hàm chỉ với một đối số. Nó được biên soạn ... Và ban đầu đã không bùng nổ ...

Tôi đang sử dụng Microsoft Visual C++ 2008.

+0

Điều đó hoàn toàn hợp pháp và không có lỗi. – Anonymous

+0

Ah, vâng, bạn nói đúng. Nó đã rất khó hiểu với tôi sau đó rằng tôi * biết * nó phải là một lỗi trình biên dịch - mà nó đã không được :) Tôi đã không bao giờ chạy vào các nhà điều hành dấu phẩy trước đây. – Statement

Trả lời

30

cast Static mất một đối số, nhưng đối số của nó là một biểu hiện, và các biểu thức có thể bao gồm các comma operator. Dấu phẩy được sử dụng trong những tình huống mà bạn muốn đánh giá hai hoặc nhiều biểu thức cùng một lúc cho tác dụng phụ của họ, ví dụ:

int i, j; 
for (i=0, j=0; i < 10; i++,j++) { 
    // do stuff 
} 

Đó là phần nào hữu ích bởi vì không có nó, bạn chỉ có thể đánh giá một biểu thức cho mỗi initializer, điều kiện, và tiếp tục các phần của vòng lặp for (hoặc bất kỳ vị trí nào khác mà một biểu thức được mong đợi). Nó không thường làm cho mã rõ ràng nhất, mặc dù, và ngữ nghĩa là lẻ. Như bạn đã quan sát, một chuỗi được phân tách bằng dấu phẩy sẽ đánh giá giá trị của biểu thức cuối cùng của nó.

+0

Tôi hiểu việc sử dụng nó trong cú pháp, nhưng tôi không nắm bắt được chức năng trong một static_cast. – Statement

+0

Không có chức năng. Bạn chỉ cần thực hiện một số thao tác bằng toán tử dấu phẩy và đưa kết quả. – Anonymous

+0

Ah, nhờ bạn và Ruben giờ tôi đã hiểu cách nó hoạt động và học được điều gì đó mới :) – Statement