【发布时间】:2015-08-18 09:03:03
【问题描述】:
如果我有一个指向该对象的指针,我可以调用该对象的非常量函数,这很烦人。我不能让指针成为 const 指针,因为我还需要调用非常量函数。因此,我唯一的选择似乎是做 static_casts 以确保 constness 也适用于指针。这是一个最小的例子:
class MyClassImpl
{
MyClassImpl(void) : m_i(0) {}
int increment(void) {
++m_i;
return m_i;
}
private:
int m_i;
};
class MyClass
{
MyClass(void) : m_pImpl(new MyClassImpl()){}
~MyClass(void) {
delete m_pImpl;
}
int doNothing(void) const {
m_pImpl->increment(); // works although MyClassImpl::increment() is non-const
// static_cast<const MyClassImpl *>(m_pImpl)->increment(); // this will not compile because of non-constness
}
private:
MyClass(const MyClass & rhs);
MyClassImpl * m_pImpl;
};
但是,我想知道 static_cast 在运行时是否有任何成本。假设 doNothing() 经常被调用,static_casts 是在编译时完全评估还是有一些开销。
编辑: 我的问题与C++ static_cast runtime overhead 不同,因为在我的情况下,static_cast 只添加了 const。发现此问题的其他用户可能对上述问题感兴趣。
【问题讨论】:
-
开销取决于类型。如果只添加 const,则没有 Overhead。
-
为什么是
static_cast而不是const_cast? -
@nwp:static_cast 可以添加 constness 但不会删除它。一个 const_cast 可以删除 constness。因此,static_cast 更安全。
标签: c++ pointers constants static-cast