gpt4 book ai didi

c++ - 如果在保持相同类型的同时添加常量,static_cast 运行时开销是多少?

转载 作者:行者123 更新时间:2023-11-30 03:50:01 24 4
gpt4 key购买 nike

如果我有一个指向该对象的指针,我就可以调用该对象的非常量函数,这让我很恼火。我不能让指针成为 const 指针,因为我还需要调用非 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。发现此问题的其他用户可能对上述问题感兴趣。

最佳答案

运行时开销本质上是一个指针拷贝,可以完全优化掉。

但是在你的情况下,我会考虑改变 int m_i;mutable std::atomic<int> m_i;并制作increment在基类中也是常量。它看起来像一个引用计数器,我的方法允许您 (i) 保留 const -正确性和(ii)是线程安全的。我也会考虑更改 intunsigned如果 m_i 避免未定义的行为变得太大了。

关于c++ - 如果在保持相同类型的同时添加常量,static_cast 运行时开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068014/

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