[解決済み] トリビアル vs. スタンダードレイアウト vs. POD
質問
平たく言うと、トリビアルタイプ、スタンダードレイアウトタイプ、PODの違いは何でしょうか?
具体的には
new T
とは異なるかどうかを判断したい。
new T()
は、どのテンプレートパラメータに対しても
T
. どの型特性
is_trivial
,
is_standard_layout
と
is_pod
を選べばいいのでしょうか?
(余談ですが、これらの型特性はコンパイラの魔法なしで実装できるのでしょうか?)
どのように解決するのか?
本当に素人考えで出来るとは思えません、少なくとも ロット の余分な説明がなければ。重要なポイントの 1 つは、静的な初期化と動的な初期化ですが、素人にそれを説明するとそれだけで数ページになってしまいます...。
POD は C++98 で (誤った) 定義がされました。実際には 2 つの別々の意図が関与しており、どちらもあまりうまく表現されていません。1) C の構造体宣言を C++ でコンパイルする場合、得られるものは C で持っていたものと同等でなければならない。 2) POD は (動的ではなく) 静的初期化のみを必要とし、使用しなければならない。
C++0x/11 では、quot;POD" の指定が (ほとんど) 完全になくなり、quot;trivial" および "standard layout" が使用されるようになりました。標準レイアウトは、C で得られるものと同じレイアウトで何かを作成するという、最初の意図を捕らえることを目的としています。
以来
new T
対して
new T()
は初期化を扱いますが、あなたは
おそらく
が欲しい
is_trivial
.
コンパイラマジックが必要なのかどうか、よくわかりません。私の直感では、おそらくイエスだと思いますが、TMP で行われたいくつかのことを知ると、誰かがこれもできないと確信するのは難しいです......。
編集:例については、おそらく N3290 からの例を引用するのが最善でしょう。
struct N { // neither trivial nor standard-layout
int i;
int j;
virtual ~N();
};
struct T { // trivial but not standard-layout
int i;
private:
int j;
};
struct SL { // standard-layout but not trivial
int i;
int j;
~SL();
};
struct POD { // both trivial and standard-layout
int i;
int j;
};
間違いなく推測できるように
POD
もPOD構造体です。
関連
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] C++のPOD型とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】C++で次のフレーズは何を意味するのか:ゼロ、デフォルト、値-初期化?