首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

定义std::pair C++17: unmatched构造函数时出错

std::pair是C++标准库中的一个模板类,用于存储一对值,即键值对。它在C++17中引入了一个新的构造函数,即unmatched构造函数。然而,根据给出的问答内容,使用该构造函数时出错。

unmatched构造函数是用于创建一个std::pair对象,其中两个值的类型可以不同。它接受两个参数,分别是键和值,用于初始化std::pair对象的成员变量。这个构造函数的目的是提供一种简便的方式来创建不同类型的键值对。

然而,根据给出的问答内容,出现了构造函数出错的情况。这可能是由于以下原因之一:

  1. 参数类型不匹配:unmatched构造函数要求键和值的类型可以不同,但是在使用时,可能传递了两个类型相同的参数,导致构造函数无法区分键和值。
  2. 键或值的类型不支持:unmatched构造函数要求键和值的类型必须是可复制的,即支持拷贝构造函数和拷贝赋值运算符。如果传递的类型不支持这些操作,将导致构造函数出错。

为了解决这个问题,可以检查传递给unmatched构造函数的参数类型,并确保它们满足上述要求。如果参数类型正确,但仍然出现错误,可能是编译器或标准库的问题,可以尝试更新编译器或使用其他版本的C++标准库。

关于std::pair的更多信息,可以参考腾讯云的C++开发文档:https://cloud.tencent.com/document/product/876/34929

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c++17好用的新特性总结

C++17之前,我们定义全局变量, 总需要将变量定义在cpp文件中,然后在通过extern关键字来告诉编译器 这个变量已经在其他地方定义过了。...std::tuple的隐式推导 在c++17以前,构造std::pair/std::tuple必须指定数据类型或使用std::make_pair/std::make_tuple函数c++17std...但是在元素已存在,emplace仍会构造一次待插入的元素,在判断不需要插入后,立即将该元素析构,因此进行了一次多余构造和析构操作。c++17加入了try_emplace,避免了这个问题。...std::map m; // emplace的原地构造需要使用std::piecewise_construct,因为是直接插入std::pair,用户可以实现类似Rust的std::result,即在函数执行成功返回结果,在失败返回错误信息,上文的例子则可以改成。

3.2K10

C++17 在业务代码中最好用的十个特性

std::tuple 的隐式推导 在 c++17 以前,构造std::pair/std::tuple必须指定数据类型或使用std::make_pair/std::make_tuple函数c++17...// pre c++17 std::pair p1{3.14, "pi"s}; auto p1 = std::make_pair(3.14, "pi"s); // ...但是在元素已存在,emplace仍会构造一次待插入的元素,在判断不需要插入后,立即将该元素析构,因此进行了一次多余构造和析构操作。c++17 加入了try_emplace,避免了这个问题。.../ emplace的原地构造需要使用std::piecewise_construct,因为是直接插入std::pair m.emplace(std::piecewise_construct...通过使用std::variant,用户可以实现类似 Rust 的std::result,即在函数执行成功返回结果,在失败返回错误信息,上文的例子则可以改成: std::variant

2.6K20
  • C++ 新增的 stl 容器实用方法,你知道几个?(文末赠送 C++20 书籍)

    循环中的t对象在每次循环,都分别调用一次构造函数、拷贝构造函数和析构函数。这个过程示意如下: 循环10次,总共调用三十次。...emplace_back 在容器尾部原位构造元素 除了使用emplace系列函数原位构造元素,我们也可以为Test类添加移动构造函数(Move Constructor)来复用产生的临时对象t以提高效率...,args参数是一个不定参数,表示构造value对象需要传给构造函数的参数,hint参数可以指定插入位置。...userid参数,因此当我们调用try_emplace方法,需要传递一个参数,这样try_emplace就会根据map中是否已存在同样的userid按需构造ChatDialog对象。...insert_or_assign的函数签名如下: template  pair insert_or_assign(const key_type& k,

    1K30

    聊聊结构化绑定

    ; } C++11标准库添加了std::tie,用若干引用构造出一个std::tuple,对它赋以std::tuple对象可以给其中的引用一一赋值(二元std::tuple可以由std::pair构造或赋值...<< ", " << kv.second << "]" << std::endl; } 但是这种方法仍远不完美,因为: •变量必须事先单独声明,其类型都需显式表示,无法自动推导;•对于默认构造函数执行零初始化的类型...,零初始化的过程是多余的;•也许根本没有可用的默认构造函数,如std::ofstream。...还有一些语法细节,比如get的名字查找、std::tuple_size没有value、explicit拷贝构造函数等,除非是深挖语法的language lawyer,在实际开发中不必纠结(上面这一堆已经可以算...延伸 C++17的新特性不是孤立的,与结构化绑定相关的有: •类模板参数推导(class template argument deduction,CTAD),由构造函数参数推导类模板参数;•拷贝省略(copy

    29110

    C++中auto关键字的用法详解

    return 0; } 编译结果: 注: 使用 auto定义变量必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。...当在同一行声明多个变量,这些变量必须是相同的类型,否则编译器将会报错,因为编译 器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。...这意味着你可以在函数定义使用auto关键字指定返回类型,编译器会根据返回语句推导出具体的类型。这样做可以增加代码的可读性和灵活性,特别是在模板编程和使用lambda表达式。...关键字来声明成员变量,并通过构造函数列表初始化语法或默认成员初始化器来推导类型。...示例: std::pair p = {1, 2.3}; auto [x, y] = p; // x是int, y是double 这些更新让auto在C++中的应用更加广泛和灵活

    28210

    深入解析C++的auto自动类型推导

    当expr是函数,它的规则和数组的情况类似,按值初始化时将退化为函数指针,如为引用时将为函数的引用,如下例子: void func(int, double) {} auto f1 = func; /...原因是std::unordered_map容器的键值的类型是const的,所以std::pair的类型不是std::pair而是std::pair)转换成std::pair<std::string, int...非类型模板形参的占位符(C++17C++17标准再次拓展了auto的功能,使得能够作为非类型模板形参的占位符,如下的例子: template void func() { std...结构化绑定功能(C++17C++17标准中auto还支持了结构化绑定的功能,这个功能有点类似tuple类型的tie函数,它可以分解结构化类型的数据,把多个变量绑定到结构化对象内部的对象上,在没有支持这个功能之前

    23020

    每个开发者都应该了解的一些C++特性

    定义了 lambda 函数的作用域,即它对局部变量和对象有多少权限。 下面是一些现代 c++中的相关定义: []代表空。因此你不可以在 lambda 表达式中使用任何外部作用域的局部变量。...这是声明为 constexpr 的函数非常重要的一点,传递的参数同样要是 constexpr 或者 const。否则,该函数会像普通函数一样执行,即不会在编译预先计算。...有趣的是,在之后的 c++17 中,又引入了 constexpr-if 和 constexpr-lambda。 tuple 和 pair 非常相似,tuple 是一组各种数据类型的固定大小值的集合。...从 c++17 开始,参数推断也适用于标准类模版。此前,该特性只支持函数模版。...因此, std::pair user = {"M", 25}; // previous std::pair user = {"M", 25}; // C++17 类型推断是隐式完成的

    75920

    C++17常用新特性(五)---强制省略拷贝或传递未实质化的对象

    ,如果在类中禁止编译器默认生成拷贝构造和移动构造函数,代码将不会被编译通过。...从C++17起,上面的代码就可以编译通过了,因为C++17直接强制在临时对象中强制省略了对象的拷贝。但是,C++17还不都彻底,当代码中包含一个具名的变量并作为返回值依然会调用拷贝构造函数。...<<endl; return obj; } 上面的代码中,调用拷贝构造或者移动构造是有条件的,如果传进去的形参没有作为函数值返回是不会调用,作为返回值才会需要,因为返回的对象是具名的。...在泛型函数中使用了完美转发,具体可以参考下文: 【C++11】 改成程序性能的方法--完美转发 除此之外,在C++17之后类中禁止移动构造函数的默认生成在实际使用时可以正常编译和运行,但是在C++17之前是编译不过的...+17起的值类型体系 从C++17起,值类型体系被明确了定义,重新明确后的值类型如下图所示: 从广义来说,值类型主要包含两种形式,分如下: glvaue: 主要是描述对象或函数位置的表达式。

    1.2K20

    C++17常用新特性(三)---结构化绑定

    C++17已经正式支持了这种语法并且命名为结构化绑定, 除了上面的写法外,还支持以下几种写法: 结构化绑定还支持: DATA data1; auto [u1, v1] {data1}; 支持结构体返回函数赋值...::cout<<v2<<std::endl; } 在C++17之前,如果要处理一个结构体返回对象需要先定义一个结构体变量,然后在对结构体的值进行分别处理。...::pair, std::tuple 和 std::array 结构化绑定是可拓展的,可以为任何类型添加结构化绑定的支持。...在C++标准库中添加了 std::pairstd::tuple、 std::array 的结构化绑定支持。...大家可以跳转到这里:C++17常用新特性(一)---带初始化的 if 和 switch 语句 4 总结 在C++标准库中只对一些类型提供了结构化定义的支持,在使用时也可以自己编写自定义类型的结构化接口。

    1.8K20
    领券