考虑以下程序。我不小心弄错了。
struct T {
int s;
T() : T() {
s=9;
}
};
int main() {
T t;
}
上面的代码在某些版本的 g++ 中编译和运行良好,例如 g++ 4.8.1(参见此处的实时演示)和 clang++ 3.6.0(参见此处的实时演示)和 MSVC++ 2015,但在运行时崩溃。它给了我分段错误错误。我认为这是由于递归,我的意思是递归调用构造函数。但是最新版本的 g++ 和 clang++ 无法通过给出以下错误来编译此代码:
prog.cc: In constructor 'T::T()':
prog.cc:3:10: error: constructor delegates to itself
T() : T() {
main.cpp:4:8: error: constructor for 'T' creates a delegation cycle [-Wdelegating-ctor-cycles]
T() : T() {
^
1 error generated.
那么,这里的问题是根据标准哪个编译器就在这里?它是这些编译器之一中的错误吗?在上面的程序中到底发生了什么?纠正我如果我的理解有误。为什么同一个程序在这些编译器的不同版本中表现出不同的行为?