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

如何编写和重载返回自身的函数?C++17

在C++17中,可以通过使用特殊的返回类型来编写和重载返回自身的函数。这种技术被称为"返回类型后置语法",它允许在函数声明的尾部指定函数的返回类型。

要编写返回自身的函数,可以使用以下步骤:

  1. 使用返回类型后置语法,在函数声明的尾部使用auto关键字作为返回类型。
  2. 在函数体内,使用*this关键字来返回当前对象的引用。

下面是一个示例代码:

代码语言:cpp
复制
class MyClass {
public:
    auto& doSomething() {
        // 执行一些操作
        return *this;
    }
};

在上面的示例中,doSomething()函数返回一个引用,该引用指向当前对象的实例。这样,可以通过链式调用的方式连续调用该函数。

使用返回自身的函数可以提供更加流畅和易读的代码编写方式。例如,可以使用链式调用来执行一系列操作,而无需每次都创建临时变量。

关于C++17的返回类型后置语法和返回自身的函数,可以参考以下链接:

请注意,以上答案中没有提及腾讯云相关产品和产品介绍链接地址,因为这些内容与问题无关。如果您有其他关于云计算或其他主题的问题,我将很乐意为您提供帮助。

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

相关·内容

如何实现JS函数重载

本人主要学是java,也习惯使用面向对象思维来思考东西,但是我却发现,javascript不能支持函数重载,如下: function...因为函数定义时参数个数函数调用时参数个数没有任何关系。...在函数中可以用f.arguments[0]f.arguments[1]得到调用时传入第一第二个参数,所以定义function(length),后面用f(10,10)调用是没有问题。...所以在上面这段代码中,第二个函数是永远不可能被调用到,那么,要怎样才能实现像函数重载那样功能呢?     那就是在函数定义中用f.arguments.length判断一下调用时传入参数个数。...f()传入一个参数也可以传入两个参数了,比如f(10)f(10,10);     个人觉得,这样虽然可以实现重载,但也不是很好用,我们可以根据具体情况在一个函数中实现重载,如果要重载两个函数相差较大

1.5K30

重载(overload) 重写(override) 区别?重载方法能否根据返回类型进行区分?

方法重载重写都是实现多态方式,区别在于前者实现是编译时多态性,而后者实现是运行时多态性。...重载返回类型没有特殊要求。 方法重载规则: 1.方法名一致,参数列表中参数顺序,类型,个数不同。 2.重载与方法返回值无关,存在于父类子类,同类中。...但是,重写方法不能抛出新强制性异常,或者比被重写方法声明更广泛强制性异常,反之则可以。 为什么函数不能根据返回类型来区分重载? 因为调用时不能指定类型信息,编译器不知道你要调用哪个函数。...所以假如我们像下面这样调用方法:f(); Java怎样判断f()具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类问题,所以不能。...函数返回值只是作为函数运行之后一个“状态”,他是保持方法调用者与被调用者进行通信关键。并不能作为某个方法"标识”。

1.2K30
  • C++函数隐藏、覆盖重载

    如果派生类函数与基类函数同名, 但是参数不同. 此时, 不论有无 virtual 关键字, 基类函数将被隐藏(注意别与重载混淆).  ...(这种查找方式倒是跟 java 一样)       java 函数是没有 virtual 关键字, 但是派生类基类只要函数参数相同, 那么该函数就被覆盖了....此时, 不论有无 virtual 关键字, 基类函数将被隐藏(注意别与重载混淆).          ...个人看法: 这个其实也不能说是隐藏, 因为 g(float) g(int) 是不同函数, C++编译后在符号库中名字分别是 _g_float _g_int.即使他们都有 virtual...关键字, 但是因为是分别存在与派生类基类中不同函数, 所以在不存在覆盖关系(重载更不可能).

    1.2K10

    如何更好编写async函数

    在async/await支持度还不是很高时候,大家都会选择使用generator/yield结合着一些类似于co库来实现类似的效果 async函数代码执行是同步,结果返回是异步 async函数总是会返回一个...这种方式经常用于在async函数中抛出异常 如何在async函数中抛出异常: async function getNumber () { return Promise.reject(new Error...合并多个不相干async函数调用 如果我们现在要获取一个用户头像用户详细信息(而这是两个接口 虽说一般情况下不太会出现) async function getUser () { let...这是因为forEach并不会关心回调函数返回值是什么,它只是运行回调。...总结 总结一下关于async函数编写几个小提示: 使用return Promise.reject()在async函数中抛出异常 让相互之间没有依赖关系异步函数同时执行 不要在循环回调中/for、while

    1.2K10

    第七章 函数

    返回类型表示了函数计算结果类型,可以为void 返回类型几种书写方法 经典方法:位于函数前部 C++11引入方式:位于函数后部(泛型编程成员函数编写可能会简化编写)...C++14引入方式:返回类型自动推导 使用constexpr if构造“具有不同返回类型”函数,接收常量表达式 返回类型与结构化绑定(C++17)语法糖...[[nodiscard]]属性(C++17) 表明返回值很重要需要保留 函数重载重载解析 函数重载:使用相同函数名定义多个函数,每个函数具有不同参数列表(参数个数或者参数类型不同...) 不能基于不同返回类型进行重载 函数重载与name mangling 编译器如何选择正确版本完成函数调用?...(image-37f2f5-1690910469933)] 函数相关其他内容 递归函数:在函数体中调用其自身函数 通常用于描述复杂迭代过程(示例)比如二分查找 内联函数/constexpr函数

    18530

    详解javascript中即时函数,内部函数,能重写自身函数即时函数内部函数返回函数函数能重写自己函数小结

    在上篇谈到匿名函数回调函数基础上,我们接着介绍javascript中即时函数,内部函数返回函数函数,能重写自身函数等几种常见函数类型及使用方法。...返回函数函数 正如之前所提到那样,函数始终有一个返回值,即便不是显示返回值么,它也会隐式返回一个undefined,所以既然函数返回一个唯一值,那么自然函数也能够返回一个函数。...} } 上面这段代码,在函数a中返回了一个匿名函数。 我们调用这个函数 a(); a()(); 直接调用a会返回a中返回函数 a()();意思是调用a,在调用a返回函数。...所以最后会弹出ab。 能重写自己函数 我们可以在一个函数内部重定义该函数。...我们使用了私有函数,somesetupactualwork两个函数都是私有函数 我们使用了了返回函数函数 当该函数第一次调用时,它会调用somesetup并返回函数变量actualwork应用。

    1.5K10

    如何更好编写async函数

    如何更好编写async函数 2018年已经到了5月份,node4.x版本也已经停止了维护 我司某个服务也已经切到了8.x,目前正在做koa2...在async/await支持度还不是很高时候,大家都会选择使用generator/yield结合着一些类似于co库来实现类似的效果 async函数代码执行是同步,结果返回是异步 async函数总是会返回一个...合并多个不相干async函数调用 如果我们现在要获取一个用户头像用户详细信息(而这是两个接口 虽说一般情况下不太会出现) async function getUser () { let...这是因为forEach并不会关心回调函数返回值是什么,它只是运行回调。...总结 总结一下关于async函数编写几个小提示: 使用return Promise.reject()在async函数中抛出异常 让相互之间没有依赖关系异步函数同时执行 不要在循环回调中/for、while

    1.1K30

    Linux:编写 Shell 脚本时如何优雅地处理函数返回状态,多行文本脚本路径

    在 Linux 环境下编写 Shell 脚本时,能够灵活处理函数返回状态以及获取脚本实际路径是非常有用技能。...本文将详细介绍如何函数返回执行状态而不是退出脚本,并推荐使用获取脚本所在位置方法。...一、让函数返回执行状态而不是退出脚本 在编写 Shell 脚本时,我们经常需要编写函数来实现代码模块化重用。然而,如果不小心使用了 exit 命令,整个脚本会被退出,这并不是我们想要结果。...完整示例 以下是一个完整示例,展示如何同时获取脚本所在位置调用者所在位置: bash #!...总结 在 Shell 脚本中,正确处理函数返回状态、设计使用 main 函数、利用 Heredoc 处理多行文本以及获取脚本所在位置是编写高质量脚本重要技巧。

    10010

    60秒问答:多态函数重载关系?

    名词隐藏机制重载 new 函数 例子(liunx api返回值设计 1返回错误 2 抛异常3 抛信号) 隐藏可以避免吗,在c++11中呢?...编译时多态:函数重载运算符重载(根据参数不同选择具体函数 ) 运行时多态:通过类继承函数实现(根据虚表指针 指向 派生类函数,还是基类函数) 四、 类型转换有几种情况,有什么区别?...:通过类继承函数实现,在运行时就就决定调用哪个函数 重写(override)就是一种运行时多态 覆盖是存在类中,【子类重写】从基类继承过来函数函数名、返回值、参数列表都必须基类相同 重载,重写都出现了...重载多态分为两种:函数重载运算符重载。 可以说,函数重载只是多态这个概念中非常小一部分。...编译时多态:函数重载运算符重载(根据参数不同选择具体函数 ) 运行时多态:通过类继承函数实现(根据虚表指针 指向 派生类函数,还是基类函数) 四、 类型转换有几种情况,有什么区别?

    1.4K10

    Java系列:构造函数重载普通函数那些事~

    上次我们讲到如何手动定义一个构造函数以及我们定义一个有参构造函数或者无参构造函数。在构造函数中最需要注意还是不能有返回值!...简单来说,我们通过构造函数重载,可以用相同方法名【类名一致】(但参数列表不同),我们便可以实现不同结果。...jvm调用 2.普通函数是由我们创建对象调用 作用 1.构造函数作用用于初始化一个对象 2.普通函数是用于描述一类事物公共行为 三.方法重载编译时多态 上面有构造函数重载,这里普通函数也是不服了...关于普通函数重载构造函数一样也是一个类中多个方法名称相同,参数列表不同,但返回修饰符不一样,普通函数返回值类型修饰符均无关。...To:封装控制实现:通过private私有访问修饰符修饰变量。 在编写Java程序时,我们一般要做到该露露,该藏的藏: 1.我们从程序设计追求“高内聚,低耦合”。

    78240

    C++17常用新特性(二)---内联变量

    C++17开始,在编写C++代码时就可以在头文件中定义inline变量。且在编译时也不会报错,如果同时有多份代码文件引用了该头文件,编译器也不会报错。不管怎么说,这是一种进步。...实际编写时可以如下代码所示: class MyClass { inline static std::string strValue{"OK"}; // OK(自C++17起 ) }; inline MyClass...那么在C++17以前,有哪些解决方法呢? 编程秘籍 实际上,根据不同使用场景,可以有不同方案。 可以定义一个返回 static 局部变量内联函数。...,在一个类内部定义了一个自身类型静态变量时需要在类外部进行重新定义。...struct MY_DATA { inline static constexpr int n = 5; } 4 内联变量thread_local 在支持C++17编译器编程时使用thread_local

    2.3K30

    如何利用python编写函数fn(a,n)求数列

    1 问题 编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回是数列,输入正整数an值(两个值都不超过9),并输出fn(a,n)结果值。...2 方法 运用def 定义函数for 循环递归方法: 先定义fn(a,n)函数; 运用for循环语句给i赋值;运用str将a转换为字符串形式 运用条件语句判断an两个值都不超过9 通过实验、实践等证明提出方法是有效...,是能够解决开头提出问题。...__=='main__': main() (fn(a,n)) 3 结语 针对实现fn(a,n)求数列问题,提出def定义函数for循环语句,通过上面实验,证明该方法是有效,本文方法存在需要注意是在判断数值大小时运用方法...在以后学习中还需要学习如何将代码进行简化,删去不必要步骤,在将数值与字符转化过程中应该合理地进行转换。

    15710

    如何编写一个通用函数?

    .✨ 前言 本文主要讲解如何使用简单模板,了解模板原理以及基本知识. 一、函数模板 模板作用: C++中模板作用是支持泛型编程。...模板可以用于函数、类、结构体等地方,以实现通用算法和数据结构。使用模板可以提高代码复用性可读性,减少代码重复编写。 示例:实现一个交换函数.....但是函数重载会有一些不合适问题....函数重载只是重载函数类型不同,代码复用率比较低,对于一个新类型又要增加新函数. 由于功能基本一样,只是类型不同,导致代码可维护性比较低,一个出错可能所有的重载均出错,均要修改....我们应当是考虑如何在调用时采取不同调用方式去满足我们需求,千万不要想着去修改模板函数返回值,参数使他们固定生成,那模板就不通用了,而且不是什么时候我们都可以去修改模板.

    18510

    C++中函数重载、隐藏、覆盖重写区别

    1.2用法 比如,要从两个变量中返回其中较大一个值,可以编写如下两个构成重载函数。 int max(int a,int b){ return a>b?...a:b; } 1.3注意事项 (1)函数返回值类型与构成函数重载无任何关系; (2)类静态成员函数与普通成员函数可以形成重载; (3)函数重载发生在同一作用域,如类成员函数之间重载、全局函数之间重载...3.1定义 派生类中与基类同返回值类型、同名同参数函数重定义,构成虚函数覆盖,也叫虚函数重写。 关于返回值类型存在一种特殊情况,即协变返回类型(covariant return type)。...C++中函数重载隐藏覆盖区别,并不难,难就难在没弄清定义,被网上各种说法弄云里雾里而又没有自己理解。...关于三者对比,李健老师在《编写高质量代码:改善C++程序150个建议》给出了较为详细总结,如下表所示: 三者 作用域 有无virtual 函数名 形参列表 返回值类型 重载 相同 可有可无 相同

    8.2K62

    Go语言函数参数返回

    不支持同名函数重载(overload)。 不支持默认参数。 支持不定长变参。 支持多返回值。 支持命名返回值。 支持匿名函数闭包。 左花括号不能另起一行。 ? ?...使用习惯用语,比如 init 表示初始化,is/has 返回布尔值结果。 使用反义词组命名行为相反函数,比如 get/set、min/max 等。 函数方法命名规则稍有些不同。...既然变参是切片,那么参数复制仅是切片自身,并不包括底层数组,也因此可修改原数据。如果需要,可用内置函数copy 复制底层数据。 ? ? 输出: ?...多返回值可用作其他函数调用实参,或当作结果直接返回。 ? 命名返回值 对返回值命名简短变量定义一样,优缺点共存。 ?...从这个简单示例可看出,命名返回值让函数声明更加清晰,同时也会改善帮助文档代码编辑器提示。 命名返回参数一样,可当作函数局部变量使用,最后由 return 隐式返回。 ? ?

    2.5K30

    带右值引用拷贝构造函数运算符重载函数

    考虑一个占用堆资源类对象拷贝构造赋值运算符重载函数,当我们用一个临时对象去拷贝构造一个新对象或者赋值给一个已经存在对象时,会出现一下问题:如string类 #include ...到这里就引出了第一个主题,带右值引用拷贝构造函数。因为临时对象是右值。临时对象用完就要析构,那就把临时对象占用资源直接给新对象就好了。...这里指对象都是持有堆资源对象。 首先,被赋值对象要释放自己占用堆资源,然后申请一个临时对象指向堆资源一摸一样大小空间,之后将临时对象指向堆空间内容拷贝到自己堆空间中。...this; } delete[] mptr; mptr = s.mptr; s.mptr = nullptr; return *this; } 结论: 至此,通过一个例子我们总结出了带右值引用拷贝构造函数运算符重载函数所带来效率提升...在实际开发中,当出现一定要用临时对象作为返回值,要用临时来进行赋值时,我们可以为其类实现带右值引用拷贝构造函数运算符重载函数,在程序效率上会得到很大提升。

    76020

    如何编写高质量 JS 函数(4) --函数式编程

    : 《如何编写高质量 JS 函数(1) -- 敲山震虎篇》介绍了函数执行机制,此篇将会从函数命名、注释鲁棒性方面,阐述如何通过 JavaScript 编写高质量函数。...《如何编写高质量 JS 函数(2)-- 命名/注释/鲁棒篇》从函数命名、注释鲁棒性方面,阐述如何通过 JavaScript编写高质量函数。...本文会从如何函数式编程思想编写高质量函数、分析源码里面的技巧,以及实际工作中如何编写,来展示如何打通你任督二脉。话不多说,下面就开始实战吧。...一、如何函数式编程思想编写高质量函数 这里我通过简单 demo 来说明一些技巧。...上面代码在第一次进行函数式优化时候,在组合高阶基础上,加入了柯里化,从而让函数变得更有复用性。 PS: 具有柯里化函数,在我看来,也是体现了函数重载性。

    2K41
    领券