C++中带默认值结构体重置函数避免代码重复的惯用方式咨询
C++中带默认值结构体重置函数避免代码重复的惯用方式咨询
这个问题问得特别实用!其实你想到的*this = Foo();这种写法,在C++开发里是相当常见且符合惯用风格的,我来给你好好唠唠:
首先,这种写法完美解决了你最初的痛点——代码重复。原来手动在ResetToStandard里挨个给成员赋值默认值的方式,不仅写起来麻烦,后续维护还容易出问题:比如哪天你给Foo加了新的成员变量,很容易就忘了同步更新ResetToStandard函数,直接导致逻辑bug。而用默认构造的临时对象赋值给当前对象的方式,直接复用了结构体的默认初始化逻辑,不管以后成员怎么变,只要默认构造/默认成员初始化是对的,重置逻辑就不会出错。
其次,这个模式确实是C++社区里的惯用写法,尤其是当你的类或结构体已经有了默认成员初始化(就像你代码里std::string bar = "standard";这种写法)或者无参默认构造函数时,这是最简洁直观的重置方式。
这里也给你提个小注意点:要确保你的结构体的赋值运算符是可用的。不过你代码里已经显式默认生成了operator==和operator!=,C会自动为你生成合适的默认赋值运算符,所以你的场景完全不用担心这个问题。如果是那种禁用了赋值运算符的类,那可能得用std::construct_at(this);(C17及以后可用)来在当前内存上重新构造对象,但你的结构体用赋值的方式就足够安全高效了。
对比下来,*this = Foo();绝对是你这个场景下的最优解,既简洁又好维护,完全符合C++的惯用风格。
内容来源于stack exchange
相关产品推荐
相关产品推荐

