2016-02-01 15 views
6

Tôi đi qua mã này trong đó một biến được gán cho chính nó không có lý do chính đáng.Mục đích của việc này là gì: "double x = x = (a - b)/(c - 1);"

double x = x = (a - b)/(c - 1); 

Điều đó không có ý nghĩa gì đối với tôi. Có lý do nào đằng sau chuyện này không?

+0

Như bạn có thể thấy phương trình trên quyền có thể gió với một mẫu số không. – Saeid

+1

Không có lý do chính đáng nào cho tôi ít nhất. Bạn có thể hỏi nhà văn. Đặt cược của tôi là trên typo ... –

+0

@Thomas: mã là mã nguồn mở của Autodesk: Dòng 117- https://github.com/AMEE/revit/blob/master/samples/Revit%202012%20SDK/Samples/Reinforcement /CS/BeamGeometrySupport.cs – Saeid

Trả lời

6

Khi gán nhiều biến cùng một lúc, tất cả các biến sẽ nhận được giá trị của toán hạng bên phải. Thực hiện phép gán kép này không cung cấp bất kỳ giá trị nào, nó thậm chí có thể được trình biên dịch tối ưu hóa thành double x = (a - b)/(c - 1);. Đây chắc chắn là lỗi đánh máy.

+0

vâng, tôi nghi ngờ đó là một lỗi đánh máy. Đã hy vọng cho một lý do tốt hơn mặc dù. – Saeid

+0

Chắc chắn là lỗi đánh máy. Chữ 'x =' thứ hai không có hiệu quả. –

+0

Đó là sự quan tâm vượt qua nếu bạn nghĩ về thứ tự các hoạt động (nếu x được khai báo là gấp đôi thì x bằng bất kỳ x nào được đặt thành). Tôi có thể tưởng tượng nó vấp ngã mọi người trong các cuộc phỏng vấn. Bởi typo tôi giả sử họ có nghĩa là nó nên được gấp đôi x = (...) –

3

Đó là typo. Không có lý do nào gán lại giá trị cho chính nó trong trường hợp của bạn.

Trên một mặt lưu ý: Tuy nhiên nếu bạn chỉ đơn giản là viết

double x = x; 

Sau đó trình biên dịch cũng cung cấp cho bạn một warning saying:

enter image description here

Trong trường hợp của bạn nó sẽ mất giá trị từ toán hạng tay phải và do đó nó sẽ biên dịch và sẽ không có vấn đề gì nhưng nó không có ý nghĩa thực sự nào. Ideone Demo

1

Trường hợp xây dựng như thế này có thể có ý nghĩa là khi bạn muốn assign the same value to multiple variables:

double x, y; 

x = y = 42; 

Bây giờ bạn có hai biến khởi tạo với giá trị như nhau, bởi vì result of an assignment expression (y = 42) is the value that was assigned (42).

Tuy nhiên, trong hình thức hiện tại của nó (hoặc from its original source, as you indicated), như vậy:

double spacing = spacing = 42; 

Làm cho không có ý nghĩa, và có thể được đơn giản hóa:

double spacing = 42; 
Các vấn đề liên quan