如何避免重复的const和非const虚拟函数?是否可以
How to avoid repeated const and non-const virtual functions ? is it possible?
假设我有一个具有以下虚拟函数的基类:
virtual int* get(){ return nullptr; }
和
我想提供const
版本(请记住我在旧版代码中有50个不同实现的球场(
const int* get() const { return const_cast<decltype(this)>(this)->GetReturn(); };//NEED CODE BADLY: const_cast :/
但是这个想法需要使用const_cast
-Scott Meyer在他的书中提出这种方法(尽管情况是逆转的( - 但是它真的是安全的(如果是,如果是,也是"未来的"吗?(示例成员是const?
我可以通过一些搜索/替换来扭转这种情况,但是在所有类上都有两个实现似乎是太多的"复制纸"。
但是真的很安全
不幸的是:
变体1:
class C
{
int n;
public:
int* get() { ++n; return &n; }
int const* get() const { return const_cast<decltype(this)>(this)->get(); }
};
变体2:
class C
{
int const n;
public:
int const* get() const { return &n; }
int* get() { return const_cast<int*>(const_cast<decltype(this) const*>(this)->get()); }
void demo() // non-const!
{
++*get();
}
};
承认,第二种情况可能不太可能 - 但也不是不可能。因此,在两个变体中的任何一个中,都有一个机会,可以提出不确定的行为...
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 使用 std::string () const 函数启动线程或未来
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么 const 函数返回左值而不是右值?
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 析构函数是否可以在 const 对象上调用非 const 函数
- C/C++ 如何在一次函数调用中交出 const 函数指针或简单指针
- 为什么我可以在C 11中使用const函数修改类
- 防止const函数被调用非const对象
- 如果C 中的支架重载运算符被声明为const函数
- C++:防止在 const 函数中更改指针的值
- 从const函数返回非const属性参考
- 调用指针参数从const函数指向的对象的操作员
- 在const函数中调用非CONST成员的非const函数
- 无法将 const 数据类型传递到非 const 函数中
- 这是检查 const 函数(如果是否创建某些内容)的更好方法
- 在 const 函数中从地图中未经选中读取
- 编译器不会为 "const" 和"not-const"函数给出不明确的错误吗
- 通过const函数中的参数索引返回std :: map的值