私はcppreference.com、cplusplus.com、およびこのサイト(What is a scalar Object in C++?)で参考資料を見つけることができました。このサイトでは、特定のC++データ型がスカラーかどうかを判断できます。つまり、「参照型、関数型、またはvoid型ですか、そうでない場合は配列、クラス、または共用体ですか?そうでなければ、スカラー型です」というような精神的アルゴリズムを適用できます。コードではもちろん、私はstd::is_scalar<T>
を適用することができます。最後に、「スカラー型は加算演算子(算術、ポインタ、メンバポインタ、列挙型、std :: nullptr_t)なしで加算演算子のための組み込みの機能を持つ型です」という作業定義を適用できます。C++型の特性のスカラーの目的は何ですか?
スカラー分類の目的の説明は見つかりませんでした。なぜスカラーなのか誰も気にするのだろうか?動物学分類学における「爬虫類」(「爬虫類はええと鳥や哺乳動物ではない羊の羊」)のような「残余」の分類のようです。私はそれがその厄介さを正当化するためにいくつかの使用を持っているに違いないと思っています。私は、なぜ型が参照であるかどうかを知りたいと思う理由を理解することができます。例えば、参照の参照を取ることはできません。しかし、なぜ人々は何かがスカラーであるかどうかを気にしますか?すべてのスカラーは何ですか?
@JoachimPileborg:私はスカラーが何を意味するのか、アランは考えます:型がスカラーである場合、私が実際に気にかけていた場所はどこでしょうか?私は 'is_scalar'が完全性のために存在すると推測しています。動機づけのあるユースケースからではなく、他の誰かが確かに言うことができます。 – GManNickG
もっと効率的なテンプレートコードを書くかもしれません:より複雑な型へのポインタをコピーするよりも速く渡すことができます。あるいは、アトミックな操作を実装するためにロックを必要とするかもしれませんが、ほとんどのアーキテクチャでは、適切に整列されたスカラーをレジスタに格納し、それをアトミックハードウェア命令として読み取りまたは更新します。 – Davislor
タイプ特性を持つものは、それらが孤立して使用されないか、または何かのタイプがわかっているということです。それらは、テンプレートメタプログラミングおよびSFINAEにおいて、例えば、テンプレート引数のタイプに基づいて特定の関数を選択します。そして、「オーバーロード(演算、ポインタ、メンバポインタ、enum、std :: nullptr_t)のない加算演算子のための組み込みの機能を持つ型」の特殊化が必要な場合、 'std :: is_scalar'は次のようになります。使用する正しい関数。 –