c++的Const成员函数和类型定义

Const member function and typedef, C++

本文关键字:类型 定义 函数 成员 Const c++      更新时间:2023-10-16

假设我们想通过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允许此工作