gpt4 book ai didi

C++11:我们什么时候需要为默认成员函数专门化 "=default"?

转载 作者:太空狗 更新时间:2023-10-29 19:47:47 25 4
gpt4 key购买 nike

做了一个简单的测试,发现“=default”只对特殊的成员函数有效,像这样:

#include<cstdio>
#include<utility>
struct Base{
Base(int){printf("Base(int)\n");}
};
struct Derived{
Derived(int)=default;
};
int main(){
Derived d(0);
return 0;
}

clang会报编译错误:

error: only special member functions may be defaulted

所以如果只允许“特殊成员函数”,这个“=default”似乎没有用:因为如果我不在“Derived”中给出特殊成员函数的定义,编译器会为我生成一个,等于使用“=默认值”。

所以我的问题是,为什么以及什么时候我们需要“=default”?

最佳答案

if I don't give definition of special member functions in "Derived", compiler will generate one for me, equal to using "=default".

不,实际上。

声明任何构造函数 - 编译器提供的默认构造函数将消失。要恢复它(以其编译器提供的形式),您可以将其定义为 = default

提供一个用户声明的析构函数——你的编译器提供的移动构造函数和移动赋值运算符将消失。要恢复它们,您可以将它们定义为 = default

提供一个用户声明的移动赋值运算符——你的编译器提供的复制构造函数和复制赋值运算符将消失。好吧,你明白了。

= default 用于在某些情况下需要恢复编译器提供的特殊成员函数的功能,而其他情况导致该函数“消失”。

关于C++11:我们什么时候需要为默认成员函数专门化 "=default"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com