gpt4 book ai didi

c++ - 编译器自动确定构造函数初始化列表?

转载 作者:行者123 更新时间:2023-11-28 02:45:45 25 4
gpt4 key购买 nike

我在问自己(但找不到答案)现代 C++ 编译器是否可以检查构造函数的主体以查看它们是否可以推断初始化列表,而不是让开发人员指定它?

例如,考虑以下代码:

MyClass::MyClass (Obj o)
{
_o = o;
}

编译器能否自动将其翻译成:

MyClass::MyClass (Obj o) : _o(o)
{}

谢谢

最佳答案

这是不可能的,因为它在一般情况下完全改变了程序的语义。一些例子:

// Order of evaluation:
struct Foo {
int a, b;
Foo() : b(a) { a = 1; } // differs from Foo() : a(1), b(a) {}
};

// Legality of the operation:
struct X { explicit X(int x); };
struct Foo {
X x;
Foo() { x = 5; } // Ill formed, while Foo() : x(5) is well formed
};

// Different effects even if allowed
struct X {
X(int) { std::cout << "int\n"; }
X() { std::cout << "default\n"; }
X& operator=(int) { std::cout << "assignment\n"; }
};
struct Foo {
X x;
Foo() { x = 5; } // prints: default\nassignment\n
// Where Foo() : x(5) {} // prints: int\n
};

在语言层面,两种操作完全不同,无法转换。话虽这么说,如果它们真的等同,优化器可能能够为两者生成完全相同的代码。

关于c++ - 编译器自动确定构造函数初始化列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24494173/

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