c – 将此指针分配给对指针的rvalue引用

前端之家收集整理的这篇文章主要介绍了c – 将此指针分配给对指针的rvalue引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下示例是否编译?
struct B;
struct A
{
  A(B*&&){}
};

struct B : A
{
  B() : A(this){}
};

int main(){}

LWS与clang它编译,但与gcc我得到:

no known conversion for argument 1 from ‘B* const’ to ‘B*&&’

如果我添加一个const它编译.

我也想指出,MSVC也错了:

cannot convert parameter 2 from ‘B *const ‘ to ‘B *&&’

所以看起来我们有两个编译器的错误.

BUGS FILED

MSVC bug link

GCC bug link

解决方法

是的,应该编译.

将其实现为cv T * const是不正确的(其中cv是函数的cv-qualifiers,如果有的话,T是类类型).这不是const,只是内置类型的prvalue表达式(不可修改).

许多人认为,因为你不能修改它,它必须是const,但正如Johannes Schaub – litb曾经评论过很久以前,一个更好的解释是这样的:

// by the compiler
#define this (__this + 0)

// where __this is the "real" value of this

这里很明显,你不能修改这个(比如说,这个= nullptr),但是也清楚没有const对于这样的解释是必要的. (你的构造函数中的值只是临时值.)

猜你在找的C&C++相关文章