簡體   English   中英

為什么我可以在lambda中使用ostream cout雖然它沒有被捕獲?

[英]Why can I use ostream cout in a lambda although it wasn't captured?

這個lambda失敗了因為我沒有捕獲變量:

int main()
{
    int val = 5;
    auto lambda = []{ return val; };  // error: val wasn't captured.
    lambda();
}

但是為什么ostream cout工作雖然它沒有被捕獲?

int main()
{
    auto lambda = []{ cout << endl; };  // works
}

這是因為std::cout是按以下方式定義的(在<iostream>頭文件中):

#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>

namespace std {
  extern istream cin;
  extern ostream cout;
  extern ostream cerr;
  extern ostream clog;
  extern wistream wcin;
  extern wostream wcout;
  extern wostream wcerr;
  extern wostream wclog;
}

而你的val變量是在本地定義的(即在函數/類的范圍內)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM