キャスト? – プログラミング – Home

通知
すべてクリア

[解決済] キャスト?


小悪魔恭子
 小悪魔恭子
(@小悪魔恭子)
ゲスト
結合: 22年前
投稿: 25
Topic starter  

コーディング上の質問ではないのですが、
とあるHPで以下のような記述がありました。
(無断転載不可と書いてあったので趣旨のみを記述します)
----------------------------------------
template <typename T>
T hoge(T a, T b)
{
return a + b;
}

void main()
{
hoge(1, 2); //OK
hoge(1.0, 2.0); //OK
hoge(1, 2.0); //コンパイルエラー
}

hoge(1, 2.0)では第1引数と第2引数型が違うため
テンプレートからインスタンスを生成できない。
これを回避するにはhoge<double>(1, 2.0)と強制的に型キャストして
使うこともできる。
------------------------------------------

手持ちの文法書(C++ Primer改訂3版)をみると
hoge<double>(1, 2.0)という記述は
明示的なテンプレート引数でありキャストという表現は
いっさい出てきません。

そこで質問なのですがhoge<double>(1, 2.0)を
キャストと表現するのは間違っているのでしょうか?

なんか場違いな質問かもしれませんが
よろしくご教授ください。


引用未解決
トピックタグ
z
 z
(@z)
ゲスト
結合: 22年前
投稿: 13
 

キャストで良いんじゃないですか
関数のスタック上で明示的に指定された型でキャストされるんですから
違いますかね...


返信引用
z
 z
(@z)
ゲスト
結合: 22年前
投稿: 13
 

ちょっと試したところ
明らかに無理な型は駄目みたいですね
int i;double d;typedef char* Cp;Cp p;
hoge<double>(reinterpret_cast<int>(p),d);//無理やり


返信引用
z
 z
(@z)
ゲスト
結合: 22年前
投稿: 13
 

前言撤回
キャストはやっぱり変ですね
hoge<int>(p,d);//これがエラーにはならないはずですからね
double temp=double(1);
a=temp;//コピーされる
ようするにこういうことですねきっと


返信引用
SS
 SS
(@SS)
ゲスト
結合: 22年前
投稿: 3
 

テンプレートから明示的にインスタンス化した関数に対して、引数を暗黙の型変換
(引数1つのコンストラクタや型変換関数)できるどうか、ということだと思います。
(通常の関数呼び出しで、コンパイラが暗黙の型変換を探すのと同様かと)


返信引用
SS
 SS
(@SS)
ゲスト
結合: 22年前
投稿: 3
 

おっと回答がない…
結局、明示的に型をキャストしてると言えなくもないですが、正しくは暗黙の型変換であり、
その型変換の対象を明示的に決定してると言いたかったわけです。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

キャストではありません。
関数テンプレートの'明示的なインスタンシエーション'
とでも言えばいいのかな。


返信引用
小悪魔恭子
 小悪魔恭子
(@小悪魔恭子)
ゲスト
結合: 22年前
投稿: 25
Topic starter  

実は、先のHPとはSDKで開発してる人なら、
おそらく誰でもお世話になったであろう
(あるいは、お世話になっているであろう)
超有名なHPに書かれてあったことです。

この「キャスト」の記述を読んでから、
(これはキャストなの?)と
ずっと気になっていました。
やはり「キャスト」と表現するのは
不適切なのですね。

やっと頭の中がスッキリしました。
ご助言くださった皆様ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました