Dim*_*tic 2 c++ auto type-deduction
在 C++ 中,auto关键字强制编译器在编译时推断变量的类型。所以在这个例子中
#include <vector>
int main()
{
std::vector<int> my_vec = {1, 2, 3};
auto my_vec_it = my_vec.begin();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器会推断出my_vec_it具有 type std::vector<int>::iterator。我知道这是因为更换auto用std::vector<int>::iterator和重新编译产生完全相同的可执行文件。
我发现auto在编译器不同意我认为变量声明应该是什么的情况下很方便,我只是希望它停止抱怨以便我可以继续写作。换句话说,auto当我不太了解我正在编写的代码时,我会使用它,这似乎是一个坏习惯。如果编译器和我在变量的类型上存在分歧,这种分歧可能会渗透并在我的代码中进一步导致更复杂、根深蒂固的错误。这让我想知道auto真正的用途是什么。
auto我上面描述的使用是一种不好的编程习惯,如果是的话,它的一些更原则性的用途是什么?
我上面描述的 auto 的使用是一种糟糕的编程习惯吗
是的。这部分是不好的做法:I don't really understand the code I'm writing. 为了解决这个问题,你需要有自律,停下来学习这个程序,直到你理解你写的东西。auto可能使编程更容易、更方便,但这只是与坏习惯的切线相关。
请注意,在大多数情况下,在抽象级别上理解程序就足够了。人们不需要(实际上也不能)始终了解每一个细节。例如, about auto my_vec_it = my_vec.begin();,知道它my_vec_it是一个迭代器就足够了。对于更多细节,人们可能会更精确并得出结论,它是一个随机访问迭代器。其余的理解来自于迭代器是什么以及如何使用它们的知识。不需要知道那个迭代器类型的定义,甚至不需要知道那个类型的名字。