[解決済み] C++11で "auto "で演繹した場合のlambdaの型は何ですか?
2022-04-23 18:40:12
質問
ラムダの型は関数ポインタであるという認識を持っていました。以下のテストを行ったところ、間違いであることがわかりました ( デモ ).
#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
long (*pFptr)(int) = LAMBDA; // ok
auto pAuto = LAMBDA; // ok
assert(typeid(pFptr) == typeid(pAuto)); // assertion fails !
}
上記のコードに抜けはありませんか?もしそうでないなら
typeof
で演繹されるラムダ式です。
auto
キーワード ?
どのように解決するのですか?
ラムダ式の型が未指定です。
しかし、一般的にはファンクタのための単なる構文上の糖分である。ラムダは直接ファンクタに変換される。の中にあるものはすべてファンクタに変換されます。
[]
の中のパラメータはコンストラクタのパラメータとファンクタオブジェクトのメンバに変わります。
()
は、ファンクタの
operator()
.
変数を捕捉しないラムダ(ambda)。
[]
's)
は変換することができます
を関数ポインタに変換します (MSVC2010 はこれをサポートしていません。もしお使いのコンパイラがそうなら、この変換は標準の一部です)。
しかし、ラムダの実際の型は、関数ポインタではない。それは不特定のファンクター型である。
関連
最新
-
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++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] C++のファンクターとその使い方とは?
-
[解決済み] なぜラムダはプレーンな関数よりもコンパイラによって最適化できるのですか?
-
[解決済み] std::type_info::name の結果のアンマッチング