gpt4 book ai didi

c++ - 在 std::map 中使用 std::less 无法编译

转载 作者:行者123 更新时间:2023-12-03 10:05:30 24 4
gpt4 key购买 nike

我无法理解为什么以下函数不能编译

#include <iostream>
#include <map>

int main(){
std::map<int, int, std::less<int>> myMap(std::less<int>());
myMap[2] = 2;
std::cout << myMap[2] << std::endl;
return 0;
}
错误信息如下——
std_less_check.cpp: In function ‘int main()’:
std_less_check.cpp:6:10: warning: pointer to a function used in arithmetic [-Wpointer-arith]
myMap[2] = 2;
^
std_less_check.cpp:6:14: error: assignment of read-only location ‘*(myMap + 2)’
myMap[2] = 2;
^
std_less_check.cpp:6:14: error: cannot convert ‘int’ to ‘std::map<int, int, std::less<int> >(std::less<int> (*)())’ in assignment
std_less_check.cpp:7:23: warning: pointer to a function used in arithmetic [-Wpointer-arith]
std::cout << myMap[2] << std::endl;
同时以下编译成功
#include <iostream>
#include <map>

int main(){
std::map<int, int, std::less<int>> myMap(std::less<int>{});
myMap[2] = 2;
std::cout << myMap[2] << std::endl;
return 0;
}
有人可以帮我解决这个问题吗?

最佳答案

在第一个程序中,您有一个令人烦恼的解析。如果编译器可以将声明解析为变量或函数,它将选择将其解析为函数。myMap可以解析为函数声明。
它返回一个 std::map<int, int, std::less<int>> .
它接受类型为 std::less<int>() 的参数,它本身是一个返回 std::less<int> 的函数类型并且不接受任何争论。请注意,您实际上不能将函数类型作为参数;该类型实际上是一个指向不带参数并返回 std::less<int> 的函数的指针。 .

在第二个程序中,替换 (){}解决歧义。现在 myMap不能再是一个函数声明,因此它声明了一个 std::map<int, int, std::less<int>> 类型的变量。 .

关于c++ - 在 std::map 中使用 std::less 无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65880956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com