3

強要に関する多肢選択問題について考えています。a、b、c、または d の 4 つの例の 1 つは強制の例です。AかBに絞ったのですが、どちらにしようか迷っています。だれか、一方が強制で、もう一方がそうでない理由を説明してください。

A)

string s="tomat";
char c='o';
s=s+c;

文字と文字列という 2 つの異なる型が追加されているため、A が正しいと思いました。c が文字列に昇格されることを意味するため、強制されます。

B)

double x=1.0;
double y=2.0;
int i=(int)(x+y);

double(x + y)がintに変換されてiに配置されるため、Bが正解だとも思いました。しかし、「int i = x + y」のように受動的にではなく、(int) を使用して積極的に行われているため、これは間違っている可能性があると思いました。

どちらも正解ではないと思いますが、残りの 2 つのオプションをリストします。

ハ)

char A=0x20;
A = A << 1 | 0x01;
cout << A << endl;

D)

double x=1.0;
double y=x+1;
return 0;

私はただ答えを探しているのではなく、説明を求めています。私は強制についてたくさんのことを読みましたが、AとBの両方が正しい答えのように見えます。では、なぜ一方が正しく、もう一方が正しくないのでしょうか。

4

2 に答える 2

0

型キャストは型強制と同等ではないと思います。そのため、Aがおそらく正しい答えになるでしょう。

Bはdoubleを取り、それをintにキャストします。これは、強制というよりは変換に似ています。Aでは、暗黙的に変換しているものは何も変換していません。あなたはランタイム/コンパイラ/何でも「これらの2つのものは似ているので、それらを連結する方法を理解できますか?」と言っています。

Cは、変換や強制ではなく、ほんの少しだけシフトします。coutは強制かもしれませんが...コンソールに書き込むための文字列への強制があるかどうかはわかりません。

1はintであり、doubleに追加しているため、Dには強制が含まれている可能性があります。ただし、小数点以下の整数を使用して浮動小数点演算を実行することはできます。

Aは強制の最も簡単な例だと思います。Cのcoutステートメントも疑わしいようですが。

于 2012-12-09T22:45:43.947 に答える
0

私は実際にそれがBだと思います。明示的なものがありますが(int)、それはまだ型強制です(自動型強制ではありません)。浮動小数点値(おそらくIEEE浮動小数点値として格納されている)を整数値(おそらく2の補数で格納されている)に変換しています。

Aは単に文字を文字列に連結しているのに対し、文字列はnullで終了する文字の配列です。そこではデータ型変換は行われず、メモリ操作が少しだけ行われます。

私は間違っているかもしれません。

編集:私はパリスに同意する必要があります。これがC++文字列であり、文字のC配列ではないことを考えると(私の間違い)、Aの文字はおそらく文字列に強制されています。

于 2012-12-09T22:48:50.200 に答える