为什么下面的行不能编译?
std::function<void (int)> f = [](int&){};
但许多其他替代方案可以:
[[maybe_unused]]
std::function<void (const int&)> f1 = [](const int&){};
//[[maybe_unused]]
// doesnt compile because losing constness
//std::function<void (const int&)> f2 = [](int&){};
[[maybe_unused]]
std::function<void (const int&)> f3 = [](int){};
[[maybe_unused]]
std::function<void (const int&)> f4 = [](const int){};
[[maybe_unused]]
std::function<void (int&)> f5 = [](const int&){};
[[maybe_unused]]
std::function<void (int&)> f6 = [](int&){};
[[maybe_unused]]
std::function<void (int&)> f7 = [](int){};
[[maybe_unused]]
std::function<void (int&)> f8 = [](int){};
[[maybe_unused]]
std::function<void (const int)> f9 = [](const int&){};
//[[maybe_unused]]
// doesnt compile because losing constness
//std::function<void (const int)> f10 = [](int&){};
[[maybe_unused]]
std::function<void (const int)> f11 = [](const int){};
[[maybe_unused]]
std::function<void (const int)> f12 = [](int){};
[[maybe_unused]]
std::function<void (int)> f13 = [](const int&){};
//[[maybe_unused]]
// doesnt compile because ??
//std::function<void (int)> f14 = [](int&){};
[[maybe_unused]]
std::function<void (int)> f15 = [](const int){};
[[maybe_unused]]
std::function<void (int)> f16 = [](int){};
我的理解是 std::function 有一个 () 运算符,它接受参数并使用参数调用仿函数的 () 运算符 因此,对于例如, - 第一个采用 const ref ,下一个采用拷贝。
按照这条逻辑,我认为 int 拷贝应该能够作为 int& 向前传递。有人可以解释一下吗?
最佳答案
std::function
forwards这是对其目标的论据。无法使用右值调用分配给 f14
的 lambda。
你对f10
的看法也不正确,即is the same case如f14
。顶级 const
在参数中被忽略。 f11
、f12
、f15
和 f16
的大小写相同。
关于c++ - 为什么 lambda 的 std::function 构造无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70753041/