2017-05-05 19 views
0

「typedef」と「using」が意味的に同等であることは何を意味しますか?私は主に「意味的に同等」という言葉に焦点を当てています。私は「意味的」に見えるようにしようとしましたが、プログラミングの世界で言葉の使用法と関連付けることのできる同義語や意味は実際には言及されませんでした。typedefとusingが意味的に同等であることは何を意味しますか?

+2

セマンティクスは、意味を扱う言語学の枝です。つまり、何かが「意味的に同等」であるということは、一般に、「彼らはまったく同じことを意味し、プログラムに同じ効果をもたらす」ということを一般的に意味します。 'using'が' typedef'が(テンプレート化されていないなど)できないこともありますが、それ以外はコンパイルにも同じ効果があります。どちらもエイリアスを作成します。 – cdhowie

+0

https://eng.stackexchange.com/とhttps://en.wikipedia.org/wiki/Semantics –

+1

を参照してください。[typedefとC++ 11での 'using'の違いは何ですか?] (http://stackoverflow.com/questions/10747810/what-is-the-difference-between-typedef-and-using-in-c11) – PointerToConstantChar

答えて

0

文法が少し違っていても、同じことを意味します。たとえば、次のよう

using INTEGER = int; 

は*使用して構文はtypedefではないテンプレートを使用しても動作しますが、非テンプレートに対して彼らは次のように

typedef int INTEGER; 

using構文で書くことができます同等。

0

あなたは別名としておよそusingを考えることがあります。

using a = b<c>; 

は「タイプとして、ab<c>の意味」のように扱うことができます。

typedef全く同じことを行いますが、それはC言語から来て、変数の宣言と同じ構文を使用し、多層のテンプレート、配列、CV-分類、関数で使用するときにそれらを読み取ることは困難ですなどの種類:あなたは簡単に名前を見ることができるので

typedef int const* (*func_t)(std::vector<int> const&); 
// The same: 
using func_t = int const* (*)(std::vector<int> const&); 
私にとっては

usingは多くの良いです。

もう1つの違いは、テンプレート引数を使用してusingを使用できることです。しばらくの間、私は私のハッキングコードでこれを使用:

template<typename T> 
using set_it = std::set<T>::iterator; 

そして私は、私はstd::set<int>::iteratorを得た型としてset_it<int>を使用するたびに。 typedefでこれを行うことはできません。

+0

*「set_it 」を使用するたびに、 'std :: set :: iterator'" * - うん、そうです。しかし、これは正確に 'auto'キーワードがC++ 11で改訂されたセマンティクスを持っているため、型を繰り返す必要はありません。それはあなたが選んだ本当に貧弱なサンプルです。 – IInspectable

関連する問題