「型変換」の版間の差分

削除された内容 追加された内容
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
8行目:
暗黙の型変換では、たとえばある式の中に複数の型の変数がある場合、すべての変数を最も上位の型に変換する。
 
<sourcesyntaxhighlight lang="c">
double d;
long l;
16行目:
if (i > l) l = i;
if (d == l) d *= 2;
</syntaxhighlight>
</source>
 
この[[C言語]]のコードでは、<code>d</code>と<code>l</code>と<code>i</code>は異なったデータ型をもっているので、すべての演算は自動的に同じ型に変換された後に行われる。より大きなサイズの型に変換されることを拡大変換 (widening conversion) と呼び、より小さなサイズの型に変換されることを縮小変換 (narrowing conversion) と呼ぶ。
27行目:
例えば[[C++]]では、ユーザー定義型の中に変換元の型を一つだけとる引数付き[[コンストラクタ]]を定義すれば、ユーザー定義の暗黙の型変換が定義できる。これを変換コンストラクタ (converting constructor) と呼ぶ。コンストラクタに<code>explicit</code>修飾子をつけると暗黙の型変換が許されなくなり、明示的型変換が必要となる。
 
<sourcesyntaxhighlight lang="cpp">
class Class1 { };
class Class2 {
40行目:
// explicit の有無にかかわらず、Class2 c2(c1); と書くことは常にできる。
}
</syntaxhighlight>
</source>
 
ここで、<code>Class1</code>と<code>Class2</code>の間には継承関係がないにもかかわらず代入ができている。これは<code>Class1</code>からコンストラクタを通して<code>Class2</code>に型変換されるからである。
51行目:
C言語とその流れにある言語では、キャスト演算子によるキャスト式により、式の右辺値を指定された型に型変換する。この構文をキャストと呼ぶ。C言語のキャスト演算子は、型名を括弧で囲んだ形式 <code>(''Type'')</code> であり、目的の式に前置する。
 
<sourcesyntaxhighlight lang="c">
double d = 1234.5678;
int x = (int)d;
</syntaxhighlight>
</source>
 
[[C++]]では従来のC言語形式のキャスト構文のほか、用途および意味を明確にした4つの異なるキャスト構文(<code>static_cast</code>, <code>reinterpret_cast</code>, <code>const_cast</code>, <code>dynamic_cast</code>)が用意されている。C++では意味が曖昧なC言語形式のキャスト構文は推奨されず、状況に応じて4つのキャスト構文を使い分けることが推奨される。