[英]auto return types in C++ function vs specifying return type
在我工作的代码库中,我看到以下内容
class custom {
auto set_data_type(custom_type_t type_t) -> custom & {
// set some stuff
// return *this;
}
}
为什么我们不能简单地做
class custom {
custom & set_data_type(custom_type_t type_t) {
// set some stuff
// return *this;
}
}
当您已经知道返回类型并且已经将其写在->...
位置时,在这种情况下使用auto
有什么意义?
似乎auto
仅在与decltype(arg)
一起使用并且arg
可能具有不同的返回类型时才有用?
我会说风格。
此外,它允许在任何情况下保持一致,
decltype(arg)
,范围(-> iterator
而不是类型名typename C::iterator
)对我来说,此功能的最大用途是在 cpp 文件中定义 function 主体时使用嵌套类型:
class MyLongClassName
{
using ANestedType = ...;
ANestedType myFunction();
}
当您实现 function 主体时,此语法避免了一些重复:
MyLongClassName::ANestedType MyLongClassName::myFunction()
{ ... }
相对
auto MyLongClassName::myFunction() -> ANestedType
{ ... }
我相信,根本不应该使用“自动”。 恕我直言,这是 void* 的丑陋兄弟姐妹; 它对程序员隐藏了类型,而最好确切地知道使用的是什么类型; 这会使一个人的编程风格变得笨拙、混乱并引发错误。 虽然唯一“合理”的用法是 typename “缩短”,但它实际上是荒谬的,因为短类型名称不需要替换,而长名称还有另一个关键字。 恕我直言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.