c++的Const成员函数和类型定义
Const member function and typedef, C++
假设我们想通过typedef
声明const成员函数:
typedef int FC() const;
typedef int F();
struct A
{
FC fc; // fine, we have 'int fc() const'
const F f; // not fine, 'const' is ignored, so we have 'int f()'
};
由于忽略了const
,因此程序可以很好地编译。为什么const
在功能上被忽略?既然我们可以用这种方式形成const指针,我唯一能想到的就是"C继承"。标准对此有什么规定吗?
c++ 14标准,[dcl。[font =宋体] pt. 7:
在函数声明符中添加cv-qualifier-seq的效果与在函数声明符顶部添加cv-qualifier-seq的效果不同函数类型的。在后一种情况下,cv-限定符将被忽略。[注:函数类型有Cv-qualifier-seq不是一个cv限定类型;没有cv限定的函数类型。
的例子:
typedef void F();
struct S {
const F f; // OK: equivalent to: void f();
};
所以,这是正确的行为
这个更改是由CWG 295做出的,主要是为了简化泛型编程。考虑:
template<class F>
void meow(const F& f) { f(); }
void purr();
meow(purr);
忽略额外的const
允许此工作
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 列表参数的类型定义
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 关于 C++ 中的函数类型定义
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 将使用/类型定义限制为类范围
- 模板类型定义?
- C++:模板类的类型定义
- 如何对命名空间限定类型进行类型定义?
- 此递归模板类型定义是否有效C++?
- 具有调整对齐方式的类型定义
- C++从抽象类型定义类成员
- 用于C++代码的 API 监视器类型定义 (XML)
- 如何将result_of与函数类型定义一起使用
- 在C++的适当类型定义位置
- 如何根据模板类型定义浮点常量?
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 参数化类的别名(或类型定义)内部类
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?