こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

投稿日時 - 2002-01-10 20:14:37

QNo.196069

困ってます

質問者が選んだベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

投稿日時 - 2002-01-10 23:31:10

お礼

ありがとうございました。

投稿日時 - 2002-01-12 13:24:20

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

三項演算子と言います

投稿日時 - 2002-01-11 09:58:32

お礼

ありがとうございました。

投稿日時 - 2002-01-12 13:23:51

ANo.3

>finalanswerの回答に補足です。
ああ、「さん」が抜けてしまった…

finalanswerさん、ごめんなさい。

投稿日時 - 2002-01-10 22:29:40

ANo.2

finalanswerの回答に補足です。

>したがって、「x = x>y ? x:y; return x;」は、以下の文と同値です。
>if (x <= y) {
> x = y;
>}
というのは、間を一段階抜かして書いてあります。

省略せずに書くと、…

…以下の文と同値です。
if ( x > y ){
 x = x;
}else{
 x = y;
}
return x;
しかし、最初の複文の中では何もやっていないので、この部分を省略し、
if (x <= y) { …

…となります。

投稿日時 - 2002-01-10 22:01:21

お礼

ありがとうございました。

投稿日時 - 2002-01-12 13:24:56

ANo.1

「x = 条件 ? A : B」という文法は、if-else文の特殊な用法で、
if (条件) {
 x = A;
} else {
 x = B;
}
と同値です。
したがって、「x = x>y ? x:y; return x;」は、以下の文と同値です。
if (x <= y) {
 x = y;
}
return x;

参考URL: 

投稿日時 - 2002-01-10 20:34:18

お礼

ありがとうございました。

投稿日時 - 2002-01-12 13:25:27