簡體   English   中英

C++ static_cast 運行時開銷

[英]C++ static_cast runtime overhead

請參閱下面的代碼。

a) 在這種情況下(簡單繼承,沒有虛擬成員), B::df() 中的靜態轉換是否有任何開銷(無論如何)? 我發現了類似問題的一些相互矛盾的答案,這就是為什么我要問......

b) 我正在考慮在 A 中將const M1 * func設為私有,並在 B 中引入一個新的私有字段const M2 * func以避免const M2 * func轉換,但這有點使事情復雜化並使智能指針的使用更加困難。 你有沒有更好的方法來避免演員陣容?


class M1 {
public:
    double f() const;
};

class M2 : public M1 { public: double df() const; };

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

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


double M1::f() const { return 1973.0; }
double M2::df() const { return 0.0; }

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

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

static_cast<T>(e)相當於通過以下方式創建了一個發明的臨時變量 v:

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

static_cast 的運行時成本正是上述語句的成本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM