static_cast中的C ++自动

时间:2019-06-05 20:03:33

标签: c++ casting auto

auto关键字可以在许多上下文中使用,并且可以与其他语言元素结合使用,例如const auto&auto&&。但是,它不能用于强制转换操作。考虑以下示例(无法编译):

template <class T> void foo(T&& t) {}

int main() {
    int i = 0;
    foo(static_cast<const auto&>(i)); // This could call foo(const int&)
}

强制转换显然可以使用int而不是auto,但是能够在强制转换中使用auto在通用代码中非常有用,例如:

  • 您可以使用const auto&(如上所述)用const左值引用显式调用重载函数。
  • 类似地,您可以将static_cast<auto&&>用作std::forward<decltype(x)>(x)的较不冗长的版本。
  • 再想一想,static_cast<auto>(x)或类似auto(x)的东西可能是显式复制对象的一种方式。

(请注意,在所有这些情况下都可以使用显式类型代替auto。)

说实话,我直觉上希望这种语法能起作用(因为它反映了auto在声明中的使用方式),但令我感到惊讶的是,它没有。由于这是一种显而易见的语法,我想知道是否有特定的原因禁止使用它?还是仅仅是没有人考虑/提议将其作为功能的情况?

0 个答案:

没有答案