C++ static_cast 运行时开销

标签 c++ runtime overhead static-cast

请参阅下面的代码。

a) 在这种情况下(简单继承,无虚拟成员),B::df() 中的静态转换是否有任何开销(无论如何)?我发现了一些类似问题的相互矛盾的答案,这就是我问的原因......

b) 我正在考虑将 const M1 * func 在 A 中设为私有(private)并在 B 中引入一个新的私有(private)字段 const M2 * func 以避免强制转换,但它有点使事情复杂化并使智能指针的使用更加困难。您有没有更好的方法来避免强制转换?


class M1 {
public:
    double f() const;
};<p></p>

<p>class M2 : public M1 {
public:
    double df() const;
};</p>

<p>class A {
protected:
    const M1 * func;
public:
    A(const M1 * p);
    ~A();
    double f() const;
};</p>

<p>class B : public A {
public:
    B(const M2 * p);
    double df() const;
};
</p>


double M1::f() const { return 1973.0; }
double M2::df() const { return 0.0; }<p></p>

<p>A::~A() { delete func; }
A::A(const M1 * p) : func(p) {}
double A::f() const { return func->f(); }</p>

<p>B::B(const M2 * p) : A(p) {}
double B::df() const { return static_cast<const M2*>(func)->df(); }
</p>

最佳答案

static_cast<T>(e)等同于通过以下方式创建一个发明的临时变量 v:

T v(e); //where T is an arbitrary type  and e is an arbitrary expression.

static_cast 的运行时成本恰好是上述语句的成本

关于C++ static_cast 运行时开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307562/

相关文章:

java - 如何使用 hibernate 处理运行时创建的表?

java - 运行时高效的公式绑定(bind)

c++ - 防止 .lib 在运行时加载 DLL

c++ - 是否有接受 unicode 的 C/C++ system() 函数?

c++ - 从 C++ 中的特定索引搜索 Vector 的元素

c++ - Visual Studio 不显示符号表?

c++ - 在 C++ 中对代数结构矩阵使用类的开销

JavaMelody 开销而不是 JMX

c++ - 将结构对象作为参数传递给 C++ 中的函数是一种好习惯吗?

c++ - 使用模板重新定义函数