gpt4 book ai didi

c++ - 引用 this 指针 : GCC vs clang

转载 作者:可可西里 更新时间:2023-11-01 18:37:34 24 4
gpt4 key购买 nike

这是 these 的后续questions .

考虑以下代码:

struct A {
private:
A* const& this_ref{this};
};

int main() {
A a{};
(void)a;
}

如果使用 -Wextra 编译,两者都是 GCC v6.2 和 clang v3.9 显示警告。

无论如何,在下面显示的稍作修改的版本中,它们的行为有所不同:

struct A {
A* const& this_ref{this};
};

int main() {
A a{};
(void)a;
}

在这种情况下 GCC没有给出任何警告,clang给出与上一个示例中返回的警告相同的警告。

警告几乎相同。
它遵循来自 clang 的那个:

3 : warning: binding reference member 'this_ref' to a temporary value [-Wdangling-field]

哪个编译器是正确的?

我会说 GCC 在这种情况下是错误的,我正在打开一个问题,但由于该语言的一个神秘的角落案例,它可能是相反的。

最佳答案

成员声明

A* const& this_ref{this};

绑定(bind)一个仅在构造函数执行期间存在的临时引用(注意:this 是一个右值表达式)。

我不确定 this 是否在该上下文中正式可用,但如果是,那么在使用该指针时你就有严重的 UB 情况。

回复

Which compiler is right?

…编译器可以根据需要发出任意数量的诊断信息。发布诊断并没有错。因此,根据您的描述,两者都接受代码,那么要么两个编译器都是正确的(我认为这很可能),要么都是错误的。

关于c++ - 引用 this 指针 : GCC vs clang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39449946/

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