[英]Defaulted special member function with external definition
我想声明一个带有默认构造函数1的class
,但我希望这个默认构造函数是“外部”,因为构造函数主体应该只编译一次,当 class 的 TU 被编译时,而不是在每个包含该 header 的 TU。 最后,不应看到 class 具有用户提供的构造函数,而是默认的构造函数2 。
例如,这是一种尝试:
foo.hpp:
class Foo {
public:
Foo();
};
foo.cpp:
Foo::Foo() = default;
这会导致默认的构造函数实现,但这意味着Foo
有一个用户提供的构造函数,这会影响类型的特征,例如,它是否微不足道等。
这是另一种方式:
foo.hpp:
class Foo {
public:
Foo() = default;
};
这保留了“非用户提供”属性,但现在每个包含此 class 并使用构造函数的 TU 都将为它生成机器代码(并且此代码可能会被内联等)。
1真的,这适用于任何特殊的成员函数,但为了具体起见,我在这里使用默认构造函数。
2 class 是否有用户提供的构造函数会影响 class 的各种重要特征和行为,例如是否具有普通构造函数,是否隐式删除其他特殊成员函数等。
语言中没有办法告诉编译器 function 是非用户提供的(“你知道关于它的一切”),同时还声称它是不透明的(“你不能在这里进行代码生成”)。 幸运的是,C++20模块的明显实现策略具有这种效果:在模块接口单元中默认为 class 的成员 function 将被考虑在任何地方进行内联,但显然只需要在 ZA8CFDE63931BD59EB62AC9ZF 生成的文件中生成一个外联副本。为模块。
如果您想要比这更强大的保证,那么您已经进入了特定于实现的领域,并且您应该研究特定于编译器的属性来管理代码生成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.