C++11 引入了将构造从一个构造函数委托给另一个构造函数的可能性—— “委托构造函数”。
但是 - 这样做时,我们可以使用 this 指针吗?例如,作为我们委托的构造函数之一的参数?在“真正的构造函数”还没有真正被调用的时候假设我们可以做到这一点并不是微不足道的。
C++11 引入了将构造从一个构造函数委托给另一个构造函数的可能性—— “委托构造函数”。
但是 - 这样做时,我们可以使用 this 指针吗?例如,作为我们委托的构造函数之一的参数?在“真正的构造函数”还没有真正被调用的时候假设我们可以做到这一点并不是微不足道的。
要获得明确的答案,需要阅读标准(即使在那里也可能并不完全清楚,请参阅@BenjaminBanner 的评论)。但在实践中 - 是的,显然我们可以this
在构造函数委托中使用。
下面的例子:
#include <iostream>
struct A {
A(int x_, void* p_) : x(x_), p(p_) { }
A(void* p_) : A(0, p_) { }
A() : A(this) { }
int x;
void* p;
};
int main() {
A a;
std::cout << "&a == " << &a << "\n";
std::cout << "a.p == " << a.p << "\n";
}
与所有 GCC、clang 和 MSVC 一起编译(GodBolt)。他们不会警告这样做,即使使用MSVC-Wall -Wpedantic -Wextra
或/W4
用于 MSVC。
它还运行(coliru.com) 并产生预期的输出(在链接上你有 g++ 编译的版本,clang++ 也可以在那里检查)。