如何声明对函数类型

时间:2018-06-07 09:28:16

标签: c++ c++11

#include <iostream>
#include <type_traits>

void func()
{

}

int main()
{
  using T = const decltype(func) &;
  using T2 = void (&)();
  std::cout << std::boolalpha << std::is_same_v<T, T2> << std::endl;
}

如何向函数类型声明const reference?上面的陈述打印true,所以我假设const中的T被忽略了。是否可以将const reference声明为函数类型?

2 个答案:

答案 0 :(得分:18)

[dcl.fct]p7

  

cv-qualifier-seq 在函数声明符中的作用与在函数类型之上添加cv-qualification不同。在后一种情况下,cv限定符被忽略。

所以你只能引用一个函数,而不是const&,因为函数类型的const被忽略了,如上所述。

答案 1 :(得分:13)

首先,所有引用都是常量。一旦引用已初始化并绑定到对象,它就不能绑定到另一个对象。参考是不变的。

当我们谈论&#34; const reference&#34;时,这实际上意味着对const对象的引用。

  

是否可以声明对函数类型的const引用?

自由函数是const意味着什么?没有。只有非静态成员函数才能是const。不,不可能引用常量函数。更好的是,编译器忽略了const限定符,这是有充分理由的。