作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 C++ 中,减少派生类中返回类型的 cv 限定符是有效的:
class Base {
virtual const Base* f();
};
class Derived : public Base {
Base* f() override;
};
这对指向原始类型的指针有效吗?
class Base {
virtual const int* f();
};
class Derived : public Base {
int* f() override;
};
最佳答案
协变 cv 限定符是否适用于 C++ 中的基本类型?
没有
§ 10.3.7 Virtual functions
The return type of an overriding function shall be either identical to the return type of the overridden function or covariant with the classes of the functions. If a function
D::f
overrides a functionB::f
, the return types of the functions are covariant if they satisfy the following criteria:
- both are pointers to classes, both are lvalue references to classes, or both are rvalue references to classes
- the class in the return type of
B::f
is the same class as the class in the return type ofD::f
, or is an unambiguous and accessible direct or indirect base class of the class in the return type ofD::f
- both pointers or references have the same cv-qualification and the class type in the return type of
D::f
关于c++ - 协变 cv 限定符是否适用于 C++ 中的原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22502653/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!