这段代码不符合。编译器提醒我:无法从“初始化列表”转换为“std::priority_queue<int, std::vector<_Ty, std::allocator<_Ty>>, std::less<_Ty>> &
”。 ”。
#include <vector>
#include <queue>
int main()
{
using namespace std;
priority_queue<int> que;
auto func = [&]()
{
vector<int> vec;
que = decltype(que)(vec.begin(),vec.end());
//cannot convert from“initializer list”to“std::priority_queue<int, std::vector<_Ty, std::allocator<_Ty>>, std::less<_Ty>> &”
};
func();
return 0;
}
如果我将 priority_queue 声明移动到 lambda 函数中,它会完美编译。
#include <vector>
#include <queue>
int main()
{
using namespace std;
auto func = [&]()
{
priority_queue<int> que;
vector<int> vec;
que = decltype(que)(vec.begin(),vec.end());
};
func();
return 0;
}
我的编译器是vs2015社区。p>
最佳答案
这似乎是 MSVC 特定的编译器错误。不允许分配,因为 que
是 priority_queue<int>&
, 使用 std::remove_reference
修复它:
#include <vector>
#include <queue>
int main()
{
using namespace std;
priority_queue<int> que;
auto func = [&]()
{
vector<int> vec;
que = std::remove_reference<decltype(que)>::type(vec.begin(),vec.end());
};
func();
return 0;
}
关于c++ - 无法使 decltype 说明符在 lambda 函数内正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183239/