(C,C++言語)関数の引数は自動キャストされる?
プログラミング言語C,C++の数値計算に関する質問です.
整数データ変数同士のみの計算結果は小数点以下は切り捨てられますよね.
もし実数型で計結果を得たいときは,int変数を(double)や(float)でキャストしてあげなければならないことは知っています.
ここで,仮引数リストにdouble型変数が設定されている関数の引数にint型変数を与えた時,関数の呼び出し時にキャストしなくても自動でキャストされるのでしょうか.
以下のサンプルコードを作成し,実行してみた結果を次に示します.
---サンプル---
#include <iostream>
using namespace std;
void printDouble(double val, double val2)
{
cout << "(double)val = " << val / val2 << endl;
}
int main(void)
{
for (int i = 1; i < 5; i++) {
cout << i / (i * 2) << endl;
printDouble(i,i*2);
}
}
-----実行結果----
0
(double)val = 0.5
0
(double)val = 0.5
0
(double)val = 0.5
0
(double)val = 0.5
-------------------------
関数の外での計算は整数に丸められてしまうので
i / ( i * 2 ) 計算結果はゼロに,関数の中では与えられた i はdouble型として扱われるので小数点以下の値も残っているということですよね.
この場合,printDouble関数へ整数を与えるときには
printDouble( (double)i , (double)( i * 2 ) );
といったようにわざわざキャストしなくても自動で仮引数の型でキャストされて関数が呼び出されると理解してもよいのでしょうか.
実行結果から明らかだろ,思われてしまうかもしれませんが,何かの参考書に記述されているのを見たり,人からそう教わったわけではなく,また関数のオーバーロードのこともありますので,質問させて頂きました.よろしくお願いいたします.
お礼
ご指摘ありがとうございます。 今回の問題はとりあえず解決いたしました!!次からはコードやプログラム本文を質問に掲載するようにします。 今後また質問することがあると思いますがそのときはよろしくお願いします!!