[解決済み】std::decayとは何ですか、またどのような場合に使用するのですか?
2022-04-06 05:24:10
質問
が存在する理由は何でしょうか?
std::decay
?
どのような場面で
std::decay
は有用ですか?
解決方法は?
<サブ
ジョークです。
std::atomic
を非放射性のものに変えることができます。
N2609
を提案した論文です。
std::decay
. この論文では、次のように説明しています。
簡単に言うと
decay<T>::type
を除いては、同一型変換です。 Tが配列型または関数型への参照である場合。このような場合 この場合decay<T>::type
はポインタまたは関数へのポインタを生成します。 それぞれ
動機となる例は、C++03
std::make_pair
:
template <class T1, class T2>
inline pair<T1,T2> make_pair(T1 x, T2 y)
{
return pair<T1,T2>(x, y);
}
は、文字列リテラルを動作させるために、パラメータを値で受け入れました。
std::pair<std::string, int> p = make_pair("foo", 0);
もし、パラメータを参照で受け付けたのであれば
T1
は配列型と推論され、その上で
pair<T1, T2>
は不正な形式となります。
しかし、これは明らかに大きな非効率をもたらします。そのため
decay
これにより、パラメータを参照で受け取る効率性を確保しつつ、コードが文字列リテラル、配列型、関数型などで動作するために必要な型変換を行うことができます。
template <class T1, class T2>
inline pair< typename decay<T1>::type, typename decay<T2>::type >
make_pair(T1&& x, T2&& y)
{
return pair< typename decay<T1>::type,
typename decay<T2>::type >(std::forward<T1>(x),
std::forward<T2>(y));
}
注
これは実際のC++11ではありません
make_pair
の実装 - C++11
make_pair
もアンラップされます。
std::reference_wrapper
s.
関連
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
最新
-
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++でユーザー入力を待つ【重複あり
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません