2017-11-29 19 views
2

C++には、long long int,unsigend intなどのビルドインタイプがあります。タイプは、const,volatileおよびmutableなどの修飾子と組み合わせることができます。マルチワードデータ定義の定義

long long intはなぜデータ型ですか?なぜそれはlongLongIntという名前ではありませんか?マルチワードデータ型はどのように機能しますか?自分自身を定義することはできますか?

カスタムデータ型に関してカスタマイズされた修飾子を定義することは可能ですか?

たとえば、3Dの線形代数ベクトルを考えてみましょう。ベクトルのx、y、z成分を含むクラスLinAlVectorを定義することができます。

私は今、このベクターは、(長さが1に等しい)の単位ベクトルであり、IはisUnitの挙動に影響を与えるされる改質剤である

isUnit LinAlVector vec(x,y,z); 

を書き込むことができる場合、私は疑問に思っていることを、保証する必要がある場合LinAlVector(たとえば、非単位ベクトルが定義されている場合はコンパイラエラー)。

私は、オブジェクト指向の直接的な方法は、クラスUnitLinAlVectorLinAlVectorから派生させることです。

+1

実際には「3つの単語」のデータ型です: 'long long int i;' – StoryTeller

+0

これらは特殊言語で書かれています –

+0

これらのマルチワード型は言語自体の一部です。複数単語の一般的な識別子は使用できません。 –

答えて

5

なぜlong long intのデータ型ですか?なぜそれはlongLongIntという名前ではありませんか?

これは標準委員会によって決定された名前であるためです。この名前は、C99の同等のデータ型と同じ名前なので、おそらく選択されていました。

longLongIntと命名された場合、新しいキーワードがその言語に導入されているはずです。新しいキーワードを導入することは後方互換性がないため、避けるべきことです。 longintはすでにキーワードだったため、long long intはキーワードを導入していません。

自分で定義することはできますか?

いいえ、言語のユーザーは、型のエイリアスと新しいクラス型を作成できますが、新しい基本型は作成できません。

コンパイラの実装者として確かに可能です。

それは、カスタマイズされた修飾子言語のユーザーとして

ないを定義することは可能です。

0

ロングタイプではない、それは型修飾子である私はそれがカスタム修飾子を定義することは不可能です知っているようhttp://en.cppreference.com/w/cpp/language/types

を参照してください。

メンバー関数isUnitを作成すると、boolを返すことができます。

-1

cstdintからFixed width integer typesを使用すると、必要なタイプの幅が入力されていることを確認できます。