我用 g++ 和 clang++ 编译了这个程序。
G++ 可执行文件打印一个“触发 A 副本分配”。
Clang++ 可执行文件打印两个“触发器 A 副本分配”并出现分段错误。
有没有畸形?还是只是clang的问题?
版本:gcc-7.4.0/clang-10.0.0
#include <iostream>
struct A {
A &operator =(const A &other) {
std::cout << "trigger A copy assignment\n";
}
};
int main() {
A x,y;
y = x;
}
Run Code Online (Sandbox Code Playgroud)
虽然不是正式的格式错误,但您的代码确实会创建未定义的行为,因为您的赋值运算符函数声明为返回A&,实际上并没有返回任何东西!
在没有 return 语句的情况下从返回值函数(main 除外)的末尾流出是未定义的行为。
这个小的代码修改将防止clang崩溃(但可能不会做你想要的):
struct A {
A& operator =(const A& other) {
std::cout << "trigger A copy assignment\n";
return *this; // MUST return SOMETHING!
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |