重新定义的运算符'='导致的分段错误

Segmentation Fault caused by redefined operator '='

本文关键字:错误 分段 运算符 新定义 定义      更新时间:2023-10-16

我用g++和clang++编译了这个程序。
G++ 可执行文件打印一个"触发器 A 副本分配"。
Clang++ 可执行文件打印两个"触发器 A 副本分配"并存在分段错误。
有没有畸形的?还是只是叮当的问题?

版本: GCC-7.4.0/CLANG-10.0.0

#include <iostream>
struct A {
A &operator =(const A &other) {
std::cout << "trigger A copy assignmentn";
}
};
int main() {
A x,y;
y = x;
}

虽然不是形式上的格式错误,但您的代码确实创建了未定义的行为,因为您的赋值运算符函数(声明为返回A&(实际上并没有返回任何内容!

从 cpp 首选项:

从值返回函数的末尾流出(主函数除外( 没有 return 语句是未定义的行为。

这个小的代码修正将防止clang崩溃(但可能不会做你想要的(:

struct A {
A& operator =(const A& other) {
std::cout << "trigger A copy assignmentn";
return *this; // MUST return SOMETHING!
}
};