模板函数类型推导和返回类型

时间:2018-01-07 13:07:23

标签: c++ templates template-deduction

为什么N = 3 vals = np.random.choice(df['label'].unique(), N, replace=False) print (vals) ['C' 'A' 'B'] df = df.set_index('label').loc[vals].reset_index() print (df) label val 0 C x5 1 C x6 2 A x1 3 A x2 4 B x3 5 B x4 atrueb?或者换句话说,为什么false中的Tfoo1,但返回类型int const只是foo2

int

2 个答案:

答案 0 :(得分:6)

名为const int foo2<const int>(const int&);的专精化的返回类型为const int,因此foo2(x)将是const int类型的prvalue。但是,没有const(或volatile)非数组,非类类型的prvalues(在您的情况下,int)。常量调整为"prior to any further analysis",它变为int类型的prvalue,decltype报告。

答案 1 :(得分:2)

如果函数返回类型是非类非数组类型,则忽略const限定符。如果你使用某个类而不是普通int,它将产生1 1:

  struct Bar{};

  int main()
  {
     Bar const x{};
     constexpr bool a = foo1(x);
     constexpr bool b = std::is_const<decltype(foo2(x))>::value;
  }

online compiler