gpt4 book ai didi

c++ - 为什么无效的 C++ 映射声明在编译时不会失败?

转载 作者:太空宇宙 更新时间:2023-11-04 16:01:24 24 4
gpt4 key购买 nike

考虑以下几点:

#include <map>
#include <string>

struct Key {};

int main(int argc, const char** argv) {
std::map<Key, std::string> key_map;
key_map.insert(std::make_pair(Key(), "hello"));

return 0;
}

显然,这不会编译,因为 Key不提供小于运算符。但是,如果我注释掉 main() 的第二行(只留下 map 声明),编译。

问题:这是为什么?模板不应该 std::map<K, V>强制执行 K 的约束声明时提供小于运算符?

最佳答案

正如您所写的那样, map 具有 std::less<Key> 类型的比较函数.在您执行尝试使用该比较函数的操作之前,代码没有问题。

默认构造函数创建一个没有条目的映射,因此它不进行比较。当您插入时,它需要进行比较,所以它会尝试 - 然后您会遇到编译错误。

关于c++ - 为什么无效的 C++ 映射声明在编译时不会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43335943/

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