Có phải if (c)
giống với if (c == 0)
bằng C++ không?Nếu câu lệnh được đánh giá bằng C++ thì sao?
Trả lời
Không, if (c)
cũng giống như if (c != 0)
. Và if (!c)
cũng giống như if (c == 0)
.
Giả sử không có quá tải quá tải nơi, thường là một phần của câu trả lời trong C++. –
ofcourse, nếu các toán tử == hoặc! = Bị quá tải, bất cứ điều gì có thể xảy ra, nó thậm chí có thể bắt đầu chơi quốc ca cho bạn ... ;-) – Jesper
Một trong những ngày này tôi sẽ tạo một lớp mà các toán tử quá tải để chơi hiệu ứng âm thanh. Nó sẽ rất tuyệt vời mỗi khi ai đó muốn sắp xếp chúng. – rlbond
Nó giống như if (c != 0)
Tất nhiên, !=
điều hành có thể bị quá tải vì vậy nó không hoàn toàn chính xác để nói rằng đó là những chính xác bằng.
Có chúng giống nhau nếu bạn thay đổi == 0
thành != 0
.
Uh, không có. – Aistina
Câu lệnh if là * đã định nghĩa * để chấp nhận bất kỳ điều gì khác không đúng. Vì vậy, có nó là như nhau. –
Tôi sẽ ngắt gói khỏi gói này ... "if (c)
" gần nhất với "if (((bool)c) == true)
". Đối với các loại số nguyên, điều này có nghĩa là "if (c != 0)
". Như những người khác đã chỉ ra, quá tải operator !=
có thể gây ra một số sự kỳ lạ nhưng có thể quá tải "operator bool()
" trừ khi tôi bị nhầm lẫn.
Câu hỏi ban đầu được gắn thẻ chỉ với C, do đó các câu trả lời ở trên vì không có bool trong C. –
nếu (static_cast
C99 có Bool ... – rlbond
Điều này chỉ đúng đối với các giá trị số. nếu c là lớp phải có một nhà điều hành quá tải mà không boolean chuyển đổi, chẳng hạn như ở đây:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
Nếu c là một con trỏ hoặc một giá trị số,
if(c)
tương đương với
if(c != 0)
Nếu c là một boolean (kiểu bool [chỉ C++]), (chỉnh sửa: hoặc một loại người dùng định nghĩa với sự quá tải của các bool operator())
if(c)
tương đương với
if(c == true)
Nếu c là cũng không phải là con trỏ hoặc một giá trị số không phải là một boolean,
if(c)
sẽ không biên dịch.
Nó c là một loại người dùng định nghĩa chỉ có thể thực hiện 'toán tử bool()' như D. Shawley và galets cả hai chỉ ra và do đó, nó sẽ biên dịch tốt. – Troubadour
Chính xác, tôi thêm nó vào lời giải thích –
Nếu c
là một con trỏ sau đó kiểm tra
if (c)
là không hoàn toàn giống như
if (c != 0)
Sau đó là một tấm séc đơn giản của c
so với 0
(null) con trỏ trong khi cựu thực sự là một hướng dẫn để kiểm tra xem c
có trỏ tới một đối tượng hợp lệ hay không. Thông thường trình biên dịch sản xuất cùng một mã mặc dù.
không, nó không phải ... cả hai có nghĩa là hoàn toàn giống nhau trong trường hợp của một con trỏ: if (c! = NULL) – Massa
Không có cách nào để biên dịch và/hoặc thời gian chạy đến biết một đối tượng có hợp lệ trong C hoặc C++ hay không. Bạn có thể viết: "X * c = (X *) 1;" Sau đó, c gần như chắc chắn trỏ đến một đối tượng không hợp lệ. Và "nếu (c)" sẽ là đúng. –
@Andrew: Tôi nghi ngờ bạn có thể biện minh cho tuyên bố của bạn rằng không có cách nào để kiểm tra xem đối tượng có hợp lệ hay không. Chắc chắn nó sẽ đòi hỏi rất nhiều nỗ lực của trình biên dịch để tạo ra mã thời gian chạy để kiểm tra và đó là lý do tại sao các trình biên dịch không bận tâm và tạo ra mã giống như kiểm tra đối với con trỏ null. Đó là lý do tại sao ví dụ của bạn không tạo ra kết quả sai trên (có thể) tất cả các trình biên dịch hiện tại. – Troubadour
- 1. C/C++ hiệu quả nhất nếu đánh giá câu lệnh
- 2. Đánh giá Expressions trong Switch câu lệnh trong C#
- 3. Câu lệnh C/C++ if() này có được đánh giá là TRUE không?
- 4. Đánh giá Truthy trong câu lệnh switch
- 5. nếu các câu lệnh trong các nút C#
- 6. Khi nào thì đầu của luồng được đánh giá?
- 7. Nếu Notepad.exe đang chạy thì taskkill nếu không chạy đến câu lệnh tiếp theo
- 8. Trình tự đánh giá trong câu lệnh if trong Javascript
- 9. Đánh giá nhiều biến trong một câu lệnh 'if'?
- 10. Câu lệnh IF có dừng đánh giá nếu nó không đạt được điều kiện đầu tiên không?
- 11. Chuyển đổi nếu câu lệnh
- 12. Đường ray nếu cú pháp câu lệnh
- 13. Truy vấn SQL, nếu giá trị bằng không thì trả về 1
- 14. Tại sao java nếu câu lệnh thất bại khi nó kết thúc bằng dấu chấm phẩy
- 15. Nếu câu lệnh trong một khai báo mảng ... thì có thể không?
- 16. Nếu câu lệnh trong bộ lặp
- 17. jQuery nếu câu lệnh, cú pháp
- 18. Nếu-thì-khác trong biểu thức JSP?
- 19. Nếu tôi xác định một mảng trong câu lệnh if thì bộ nhớ có được cấp phát không?
- 20. bash/sh nếu cú pháp câu lệnh
- 21. Javascript nếu đánh giá biểu thức
- 22. C++ Đánh giá Boolean
- 23. Nếu tôi cấp phát bộ nhớ bằng mmap thay vì malloc thì sao?
- 24. Tại sao các giá trị được sao chép từ lưới được trả lại được đánh dấu bằng dấu ngoặc kép?
- 25. nếu chặn câu lệnh echo bên trong?
- 26. Chính xác thì một câu lệnh trả về làm gì trong C#?
- 27. Làm cách nào để dọn dẹp quá nhiều câu lệnh nếu có thể đọc được
- 28. Java ternary (ngay lập tức nếu) đánh giá
- 29. Đánh giá nếu danh sách rỗng JSTL
- 30. Nếu tôi không gọi ReleaseBuffer sau GetBuffer thì sao?
Hãy nhớ rằng 0 không phải lúc nào cũng có nghĩa giống nhau. Nó có thể là hằng số con trỏ null hoặc số nguyên không. –
Bạn không có nghĩa là "Nếu (c) giống như (c! = 0) trong C++?" ? –
Biến c có thuộc loại cụ thể không? –