为什么在函数类型中添加`const`不会使`is_const`为真?

时间:2016-03-15 18:15:39

标签: c++ language-lawyer

考虑这些:

std::is_const<void() const>::value == false
std::is_same<void() const, std::remove_const_t<void() const>>::value == true

我原以为函数类型void() const会被视为const

为什么不呢?

1 个答案:

答案 0 :(得分:4)

免费功能不能为const,因此会忽略应用于免费功能类型的const

只有成员函数可以是const

  

[C++14: 8.3.5/6]: cv-qualifier-seq ref-qualifier 只能属于:< /强>

     
      
  • 非静态成员函数的函数类型
  •   
  • 指向成员的指针引用的函数类型
  •   
  • 函数typedef声明的顶级函数类型或 alias-declaration
  •   
  • type-id type-parameter (14.1)的默认参数中,或
  •   
  • type-parameter (14.2)的模板参数的 type-id
  •   
     

cv-qualifier-seq 在函数声明符中的作用与在函数类型之上添加cv-qualification不同。在后一种情况下,将忽略cv限定符。 [注意:具有 cv-qualifier-seq 的函数类型不是cv限定的类型;没有cv限定的函数类型。 -end note] [..]