小编Mid*_*umo的帖子

无论何时我应该使用dynamic_cast进行下注吗?

我注意到,当以下操作非多态时,例如以下代码,编译器将优化一些dynamic_cast:


#include <iostream>

using namespace std;

struct A
{
    virtual ~A() = default;
    virtual int f()
    {
        return 1;
    };
    virtual int g() = 0;
};

struct B : A
{
    int g() const
    {
        return 2;
    }
    int g() override
    {
        return 3;
    }
    int h()
    {
        return 4;
    }
};

int main()
{
    A*   p  = new B();
    auto u  = p->f();
    auto v1 = static_cast<B*>(p)->f();
    auto v2 = dynamic_cast<B*>(p)->f();
    auto w  = p->g();
    auto x1 = static_cast<const …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-cast

5
推荐指数
2
解决办法
142
查看次数

默认构造函数和匿名联合的析构函数的未定义行为?

以下代码使用g ++ 7.3和clang ++ 7.0提供了不同的编译结果,但据我所知,S1,S2,S3的所有复制构造函数均被删除,并且任何实例化均不应成功。

题:

  1. C ++标准中未定义这种情况(S1,S2)吗?
  2. 没有构造函数/析构函数实现的匿名联合与具有默认构造函数/析构函数的命名联合之间有什么区别?
template <typename T>
struct S1
{
    union
    {
        T payload;
    };

    S1() {}
    ~S1() {}
};

template <typename T>
struct S2
{
    union
    {
        T payload;
    };

    S2() {}
    virtual ~S2() {}
};

template <typename T>
struct S3
{
    union U
    {
        T payload;

        U()  = default;
        ~U() = default;
    } storage;

    S3() {}
    ~S3() {}
};

#include <iostream>

struct A // overloaded A() & ~A()
{
    A()
    {
        std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ unions

5
推荐指数
0
解决办法
64
查看次数

继承的模板类的虚拟析构函数

没有人能解释一下如何delete x正常工作吗virtual ~X()

#include <iostream>

struct B
{
    B()
    {
        std::cout << "B()" << std::endl;
    }
    virtual ~B()
    {
        std::cout << "~B()" << std::endl;
    }
};

struct C : B
{
    C()
    {
        std::cout << "C()" << std::endl;
    }
    virtual ~C()
    {
        std::cout << "~C()" << std::endl;
    }
};

template <class T>
struct X : T
{
    X()
    {
        std::cout << "X()" << std::endl;
    }
    ~X()
    {
        std::cout << "~X()" << std::endl;
    }
};

template <class T> …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism templates

2
推荐指数
1
解决办法
72
查看次数

标签 统计

c++ ×3

dynamic-cast ×1

polymorphism ×1

templates ×1

unions ×1