C++ 11中的"始终使用自动"?

oz1*_*1cz 5 c++ auto c++11

C++大师Herb Sutter建议我们几乎总是使用"auto".他在他的网站上说明了这一点,他最近在CppCon 2014大会上重申了这一点.

我试图听从他的建议而且我不相信.这里是否有人同意Sutter,谁可以告诉我原因

auto gender = string{};
auto number = string{};
auto person = string{};
Run Code Online (Sandbox Code Playgroud)

比...更好

string gender, number, person;
Run Code Online (Sandbox Code Playgroud)

这是我最终写在我的代码中,因为我无法忍受汽车风格.

编辑:

auto gender = string{}, number = string{}, person = string{};
Run Code Online (Sandbox Code Playgroud)

也是一种可能性,但在我看来,情况更糟.

hek*_*ang 2

auto 关键字主要用于使用值初始化变量的情况,因为这使得在更改初始化变量的值时代码更易于维护:

uint16_t id_ = 65535;

uint16_t id()
{
    return id_;
}

auto myid = id();
Run Code Online (Sandbox Code Playgroud)

myid如果返回类型改变则不需要改变类型id()

有了 C++14,它会变得更好:

uint16_t id_ = 65535;

decltype(auto) id()
{
    return id_;
}

auto myid = id();
Run Code Online (Sandbox Code Playgroud)

更改 的类型id_会自动调整 的返回类型id()和 的类型myid

如果变量的初始值未使用值进行初始化,并且因此不依赖于其他代码进行初始化,则显式定义变量类型是有意义的,因为 auto 关键字不会为代码添加更多可维护性,并且语法auto gender = string{};的可读性比string gender;.

  • 在这种情况下你是对的。但问题涉及一种使用默认构造函数直接构造对象的情况。在你在这里提到的情况下,我对 auto 没有任何问题,但我确实觉得 `typevariable` 比 `autovariable=type{}` 更简单,更具可读性。 (3认同)