gpt4 book ai didi

c++ - 使用 `static_cast` 向下转换空指针(单继承或多继承)

转载 作者:太空宇宙 更新时间:2023-11-04 15:13:56 25 4
gpt4 key购买 nike

正如标题所说,如果我将指针转换为基类、派生类,当指针为 null 时,从 C++11/C++14 的角度来看是否是安全操作标准?

struct base
{
virtual ~base() = default;
};

struct derived : base {};

struct wrapper
{
using allowed_derived_t = derived;
base* base_ptr = nullptr;

void set_ptr(base* ptr)
{
if (!dynamic_cast<allowed_derived_t*>(ptr))
throw std::logic_error("Check your user code");

base_ptr = ptr;
}

allowed_derived_t* ptr() const
{ return static_cast<allowed_derived_t*>(base_ptr); }
};

ptr() 方法是否安全,如果我在调用 set_ptr 之前调用它?因为,在设置指针之前,base_ptr 不是所需的类型 (allowed_derived_t),但是,动态指向的对象不是错误类型(因为没有指向对象)。

在那种情况下,标准是怎么说的?

最佳答案

所有格式良好的指针到指针转换都保证源类型的空指针安全地转换为目标类型的空指针。

对于dynamic_cast,它在

5.2.7 Dynamic cast

4 If the value of v is a null pointer value in the pointer case, the result is the null pointer value of type T.

对于static_cast,在

中说明

5.2.9 Static cast

11 [...] The null pointer value (4.10) is converted to the null pointer value of the destination type.

所有其他类型转换都提供类似的保证。

关于c++ - 使用 `static_cast` 向下转换空指针(单继承或多继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41108304/

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