我是C++中的新手。我只是嘗試了幾個小的代碼片段來理解使用GCC 4.6.3編譯的lambda函數-std=c++0x
。我知道它不是C++ 0x的最佳選擇,但它支持lambda表達式。 我已經寫了這個:爲什麼C++中的Lambda函數0x返回類型必須是auto?
int main(){
int val1 = 0, val2 = 0;
std::cout << "Enter Value1" << '\n';
std::cin >> val1;
std::cout << "Enter Value2" << '\n';
std::cin >> val2;
auto result = [&val1, &val2](){return (val1 + val2);};
std::cout << "Result: " << [](int x, int y){return(x + y);}(32, 46) << '\n';
//std::cout << "Result: " << [&val1, &val2](){return (val1 + val2) ;} << '\n';
return 0;
}
我的第一個問題是,爲什麼我一定要定義result
爲auto
時,我已經知道了預期(隱含的)結果將是int
? 在註釋的代碼行中,我收到錯誤error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’
。 你能告訴我爲什麼發生了嗎? 在此先感謝。
我懷疑這個lambda表達式是類似Python中的一行函數,所以不會導致應該返回變量&汽車應該說像返回類型是一些(void *)?這就像調用result = func(int x,int y); func的定義是int func(int,int); ??另外std :: function是一個使事情變得複雜的包裝,你不這麼認爲嗎? –
爲增加關於lambda表達式的信息的投票權。 :) –
@AshankPanwar:Lambdas就像無名的函數,但你似乎在函數的結果和函數本身之間感到困惑。 –