我想選擇取決於一些有條件的拉姆達,但是編譯器,對於一些lambda表達式表示,該類型的lambda表達式不三元運算符的分支之間匹配。爲什麼在三元運算符分支之間返回lambdas適用於某些lambdas?
下面的代碼編譯:
int flag = 4;
auto result = flag % 2
? [](int x) {
return x + x;
}
: [](int x) {
return x * x;
};
但下面的2段不進行編譯:
int flag = 4;
auto result = flag % 2
? [flag](int x) {
return x + flag;
}
: [flag](int x) {
return x - flag;
};
auto result2 = flag % 2
? [](auto x) {
return x + x;
}
: [](auto x) {
return x * x;
};
導致以下錯誤分別是:
test.cpp: In function 'auto f(int)':
test.cpp:8:9: error: operands to ?: have different types 'f(int)::<lambda(int)>' and 'f(int)::<lambda(int)>'
? [flag](int x) {
test.cpp: In function 'auto f(int)':
test.cpp:10:9: error: operands to ?: have different types 'f(int)::<lambda(auto:1)>' and 'f(int)::<lambda(auto:2)>'
? [](auto x) {
^
爲什麼做的最後一2個片段不能編譯?
說「錯誤」時請附上確切消息。 –
順便說一句,作爲一種解決方法,你可以明確地將至少一個lambda轉換爲'std :: function'。 –
我該如何解決lambda具有'auto'參數的最後一個問題? –