我知道编译器生成的函数、三法则和五法则。在现实世界的场景中,确定编译器实际上创建了哪些编译器生成的函数(构造函数、赋值运算符、析构函数)可能并不容易。 有没有办法列出特定类的编译器生成的函数? 我主要关注Visual Studio 2019和Xcode,但是通用的解决方案更加受欢迎。
规则很复杂。我将从另一个答案中引用一张表,该答案引用了Howard Hinnant的演示文稿。 这里的道德是一个好的实践是不要依赖编译器的隐式声明,而是显式声明每个特殊成员(根据您的需求进行默认或删除)。
有没有办法列出特定类的编译器生成函数?在Linux(和其他Unix系统)上,您可以使用nm、readelf和objdump对生成的目标文件/库/可执行文件进行反汇编并检查导出的符号(以及更多内容)。在Windows上有类似的工具,但我不怎么使用这个平台,所以无法提供具体的工具名称。
这目前只是一个部分回答。 Visual Studio 2019 构造函数 在定义类对象时,Visual Studio的智能感知功能会显示可用的构造函数,包括编译器生成的和你自己定义的: 很不幸,这些信息并不总是自动显示。为了让上面的截图正常工作,我不得不在括号内输入一些内容,因此出现了逗号。