- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(C,C++言語)関数の引数は自動キャストされる?)
(C,C++言語)関数の引数は自動キャストされる?
このQ&Aのポイント
- C言語やC++で関数の引数にint型変数を与えた場合、自動的にキャストされるのか疑問です。
- サンプルコードを作成し、実行してみた結果から、関数の外での計算は整数に丸められ、関数の中では与えられた値がdouble型として扱われることがわかりました。
- この場合、関数の引数としてint型変数を与える際、わざわざキャストしなくても自動で仮引数の型でキャストされると理解してもよいのか疑問です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関数呼び出し時の引数の割り当ては基本的に「初期化」として処理されます. つまり, 今の例だと関数呼び出しによって double val = i; double val2 = i*2; という初期化がなされることになります. 右辺にキャストは必要でしょうか?
その他の回答 (2)
- BuriBuri4
- ベストアンサー率28% (150/525)
回答No.3
T1/T2 演算を行う際に、T1とT2のどちらかが実数であれば演算は実数で行われる。 T1,T2の両方が整数の場合、演算は整数で行われる。 キャストが付いてるか付いてないか、関数の中か外かの問題ではなく演算自体がどの型で行われるかの違いです。 リテラルで考えると分かりやすくて 1/i は整数で演算が行われ i>1 なら必ず0になる。 1.0/i は実数で演算が行われるので 0 にならない。 実数どうし、整数どうしの場合は演算はより精度の高いほうの型で行われます。 ※実行結果の格納は別の問題です。 この辺りはコンパイラの作りの問題に近いので「コンパイラの作り方」みたいな本を参考にされたほうが理解が早いかもしれません。
- Gotthold
- ベストアンサー率47% (396/832)
回答No.2
関数に引数に限らず、ただの代入でも同様でしょう。 int i; double val; i = 10; val = i; このような場合、 最後の代入で暗黙の型変換が行われることは分かりますよね?
お礼
代入演算と暗黙変換,なるほどです. 試しにintを引数にとる関数を用意してdoubleを与えたら,ちゃんと警告が出て,呼び出し時に(int)キャストして明示変換してやれば警告はなくなりました. 通常の代入と同じですね. 回答ありがとうございました.