当前位置: 首页 > 编程笔记 >

C++ 转发参考上的重载

慎峻
2023-03-14
本文向大家介绍C++ 转发参考上的重载,包括了C++ 转发参考上的重载的使用技巧和注意事项,需要的朋友参考一下

示例

提供转发参考过载时,您必须非常小心,因为它可能匹配得很好:

struct A {
    A() = default;           // #1
    A(A const& ) = default;  // #2

    template <class T>
    A(T&& );                 // #3
};

这里的意图是A可复制的,并且我们拥有此其他构造函数可能会初始化其他成员。然而:

A a;     // 呼叫#1
A b(a);  // 叫#3!

构造调用有两个可行的匹配项:

A(A const& ); // #2
A(A& );       // #3, with T = A&

两者都是精确匹配项,但是#3引用的cv限定对象比实际的少#2,因此它具有更好的标准转换顺序,并且是最佳的可行函数

这里的解决方案是始终约束这些构造函数(例如,使用SFINAE):

template <class T,
    class = std::enable_if_t<!std::is_convertible<std::decay_t<T>*, A*>::value>
    >
A(T&& );

这里的类型特征是要从考虑中A公开明确地排除任何类A,这会使该构造函数在前面描述的示例中格式不正确(因此从重载集中删除)。结果,调用了复制构造函数-这就是我们想要的。

 类似资料:
  • C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String & Character Standard C Math Standard C Time & Date Standard C Memory Other standard C functions C++ C++

  • C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

  • 本文向大家介绍C++ 定义参考,包括了C++ 定义参考的使用技巧和注意事项,需要的朋友参考一下 示例 引用的行为类似,但不完全像const指针。通过&在类型名称后加上“&”号来定义引用。 此处refi是的参考i。 引用抽象了指针的语义,就像对基础对象的别名一样: 您还可以在一个定义中定义多个引用: 引用必须在定义时正确初始化,此后不能修改。以下代码段导致编译错误: 您也不能直接将引用绑定到null

  • 《重訂標點符號手冊》(2008年修訂版)— The Revised Handbook of Punctuation (2008 edition) 《标点符号用法》— General Rules for Punctuation (GB/T 15834―2011) 《出版物上数字用法》— General Rules for writing numerals in public texts (GB/T

  • 问题内容: 我正在研究一个基于Java Swing的简单应用程序。我将如何获取和设置表单当前关注的文本字段/文本区域的文本? 我知道如何确定哪个组件具有焦点,但是我不知道如何获取组件的选定文本。我使用getFocusOwner(),但它返回一个Component,因此未实现getSelectedText()方法。我是否需要进行类型转换? 问题答案: 根据您的确切上下文,您可能考虑使用自定义Text

  • Linux C API 使用手册,函数是模块化程序设计思想的产物,是构成 C 语言程序的基本功能模块,它完成一项相对独立的任务。