Out of Memory

ごめん、忘れてた。

目次

Blog 利用状況

ニュース

2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

aetos

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

Microsoft MVP for Windows SDK July 2007 - February 2008, Microsoft MVP for Visual C++ February 2008 - June 2009
Microsoft MVP for Windows SDK
July 2007 - February 2008
Microsoft MVP for Visual C++
February 2008 - June 2009

アクセサリ

あわせて読みたい

e-Words

アフィリエイト

記事カテゴリ

書庫

日記カテゴリ

型推論比較

// せっかく鎮火したところにまた油を注ぐようでアレですけども…

型推論を3つ挙げてみる。

  1. C# の var
  2. C# のジェネリックメソッドの型パラメータ
  3. C++ の関数テンプレートの型パラメータ

C# の var は、「型名を書かなくていい」ということだけだと思うのですね。
その変数を使うときは、その型が何なのかは意識しておかなければならないわけですし。
数値型であっても、数値型であるという認識は必要です。

C# のジェネリックメソッドの型パラメータは、where による制約がある場合とない場合を分けて考えます。
まず、ない場合。これは、関数の呼び出し側、呼び出され側ともに、本当に型をまったく意識しなくていいわけです。この点は var と異なります。
で、ある場合。この時は、推論が働きません。いや、コンパイラが実際にどう振舞うかは知りませんが、呼び出し側も呼び出され側も、制約に型が明記されていますので、その型のオブジェクトとして扱えばよいのです。

C++ の関数テンプレートの型パラメータも、C# 同様に、まったく意識しなくていい場面もあります。
が、C++ で特徴的な部分を捉えるならば、明文化はされていないものの制約はある、という点でしょう。
しかし、コンパイラと同じ推論を人間もしなくてよいという点においては、本質的に C# のジェネリックと同じです。

ジェネリックとテンプレートは、型を推論するのはコンパイラだけです。
関数の呼び出され側は、型パラメータが実際にどの型に解決されるかを意識する必要がありません。
var は、プログラマが中身の型を意識する必要があります。
この比較をもって、どっちが優れているとか劣っているとか、var がいいとか悪いとかは言いません。もう語りつくされたでしょうし。
ただ、一口に「型推論」と言っても、性質は違うもんだなぁ、と。それだけです。

投稿日時 : 2007年12月30日 13:00

Feedback

# re: 型推論比較 2007/12/31 11:17 凪瀬

いままでの議論を見ていると、
C#のvarのプリミティブ型と参照型で意見が違うようですが。
この二つは分けて論じるべきなのかな?

タイトル  
名前  
Url
コメント