gpt4 book ai didi

c++ - 将此指针分配给指针的右值引用

转载 作者:可可西里 更新时间:2023-11-01 15:09:08 26 4
gpt4 key购买 nike

下面的示例应该编译吗?

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 *&&'

所以看起来我们在两个编译器中都有一个错误。

错误提交

MSVC bug link

GCC bug link

最佳答案

是的,应该编译。

this 实现为 cv T* const 是不正确的(其中 cv 是函数的 cv 限定符,如果有的话,T 是类类型)。 this 不是 const,只是内置类型(不可修改)的纯右值表达式。

很多人认为因为你不能修改this所以它一定是const,但是作为Johannes Schaub - litb很久以前评论过,更好的解释是这样的:

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

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

这里很明显你不能修改this(比如,this = nullptr),但也清楚没有const是必要的这样的解释。 (并且您在构造函数中拥有的值只是临时值。)

关于c++ - 将此指针分配给指针的右值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15558664/

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