當我編譯和使用Visual C++ 2010運行此:爲什麼這個仿函數(「lambda」)給出一個奇怪的警告?
#include <iostream>
int main() {
int subtrahend = 5;
struct Subtractor {
int &subtrahend;
int operator()(int minuend) { return minuend - subtrahend; }
} subtractor5 = { subtrahend };
std::cout << subtractor5(47);
}
我得到正確的答案,42
儘管如此,編譯器會抱怨,這是不可能的:
溫度。 cpp(9):警告C4510:
main::Subtractor
:默認構造函數無法生成
Temp.cpp(6):請參閱聲明main::Subtractor
Temp.cpp(9):警告C4512:
main::Subtractor
:
Temp.cpp(6)賦值運算符不能生成:看到main::Subtractor
Temp.cpp的聲明(9 ):警告C4610:
struct main::Subtractor
永遠不能被實例化 - 用戶定義構造函數需要
發生了什麼事?
如何獲得'42'作爲答案? 48-5是否等於42? – Nawaz
@Nawaz:哈哈,很好。這是因爲我最初是用48進行測試,但後來我認爲47會是一個更有趣的例子,所以我放下了42個。47在複製/粘貼錯誤期間爬過。 :P – Mehrdad
你爲什麼認爲'47'會是更「有趣」的例子?這有什麼特別之處?你的年齡? :P – Nawaz