2011-11-02 36 views
7

Tôi đã cố gắng để có được số học nếu nhà điều hành để làm việc nhưng tôi chỉ có vẻ không thể làm điều đó. Tôi mới sử dụng C++ và vẫn đang học những điều cơ bản nhưng tôi chỉ tự hỏi liệu tôi có đang sử dụng toán tử này một cách chính xác hay không. Nó phải trả về false nếu x < y. Đây có phải là cách chính xác để làm điều đó không? Tôi biết tôi có thể sử dụng nếu có, nhưng tôi chỉ tự hỏi nếu tôi cũng có thể làm điều đó như thế này và nếu tôi có thể làm những gì tôi đang làm sai.Số học C++ nếu nhà điều hành

#include <iostream> 
using namespace std; 
int x =0; 
int y =1; 

bool test() 
{ 
    return (x < y) ? true : false; 
} 

int main() 
{ 
cout << test; 
return 0; 
} 
+7

Tôi biết đây là một ví dụ, nhưng không ai sai ý tưởng: trong trường hợp này, bạn chỉ cần viết 'return x

+1

Không cần toán tử bậc ba, "return x Benj

+2

Ngoài ra, chỉ cần quan tâm, hãy thử "cout << std :: boolalpha << test() << endl" – Benj

Trả lời

9

Bạn trạng:

Nó giả sử trả lại sai nếu x < y

Và bạn đang cố gắng tìm hiểu về toán tử số học (ternary), vì vậy hãy bỏ qua tất cả lời khuyên để loại bỏ nó.

Phần đầu tiên sau ? là nội dung sẽ được trả lại nếu biểu thức là đúng và phần thứ hai sau : là những gì sẽ được trả về nếu nó không đúng. Vì vậy, bạn có giá trị trả về của bạn bị đảo ngược và phải là:

return (x < y) ? false : true; 
16

Thay đổi

cout << test; 

để

cout << test(); 

Nếu bạn không gọi hàm.

Ngoài ra, như sau:

return (x < y) ? true : false; 

hiện ngược về những gì bạn nói rằng bạn đang cố gắng làm ("return false nếu x < y").

Cách đúng là:

return (x < y) ? false : true; 

Lưu ý rằng trong trường hợp này các nhà điều hành ternary là không cần thiết, vì bạn chỉ có thể làm:

return !(x < y); 
+2

+1. Lưu ý rằng việc tăng mức cảnh báo trên trình biên dịch của bạn có thể đã được cảnh báo về việc chuyển đổi từ một con trỏ hàm thành 'void *' ở đây. –

+0

-1 OP cho biết "trả về false nếu x IronMensan