这是最简单的示例:
class A
{
A* const& this_ref;
public:
A() : this_ref(this) {}
};
GCC 5.3.0警告:
警告:对'A::this_ref'的临时绑定仅在构造函数退出之前持续存在[-Wextra] A() : this_ref(this) {}
this
是临时变量吗?什么鬼……MSVC 2015对此保持沉默,在我的情况下通过this_ref->member
在构造函数外部引用类成员会得到预期行为(但可能只是未定义行为的例子,我不确定)。
编辑:
请注意,此问题扩展了一个链接的可能重复问题,因为它不是关于创建此类引用的通用问题,而是涉及创建此类引用时GCC(和可能的其他编译器,而非MSVC)产生的警告。
this
仅在构造函数运行时存在,然后停止存在,因此它是临时的。(这正是警告所告诉您的。) - David Schwartzthis
的地址吗?我认为不行。如果引用没有地址,你如何期望引用能够工作呢? - n. m.this
指针的误解而引起的,但是“是否可能获得引用…”在阅读评论之前毫无意义,在阅读评论之后也几乎没有意义。此外,这个问题询问了一个特定编译器版本中的特定警告,而链接的问题则相当于“我正在尝试使用C++11功能替换一个奇怪的Perl式重命名宏,因为某些原因。” - Kyle Strand