gpt4 book ai didi

C++ static_cast 和引用

转载 作者:可可西里 更新时间:2023-11-01 15:05:33 24 4
gpt4 key购买 nike

struct A{};
struct B : A{};

int main()
{
A a;
A& a_ref = a;

static_cast<B>(a); // *1
static_cast<B&>(a_ref); // *2

return 0;
}

(*1) 产生错误,我明白为什么。 (*2) 编译正常,但为什么呢?而且,只要它编译并假设 B 包含一些属性,如果我将 a_ref 转换为 B& 然后尝试访问属性会怎样?我想我会遇到运行时错误或其他问题。

所以,正如我所看到的,有一种情况会导致崩溃,并且没有办法避免它,这与 dynamic_cast 不同,后者可以检查转换结果是否为 null 或输入代码在 try-catch 区域。我如何处理这种情况,我需要转换引用并确保我真的得到正确的引用。

最佳答案

来自标准 n3337 草案 5.2.9/2

An lvalue of type “cv1 B,” where B is a class type, can be cast to type “reference to cv2 D,” where D is a classderived (Clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists (4.10),cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is neither a virtual base classof D nor a base class of a virtual base class of D.

在你的情况下:

B是从 A 派生的类, 两者都是非常量,并且从 A* 转换而来至 B*允许,A不是 D 的虚基类.

关于C++ static_cast 和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19683010/

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