如果函数 f() 返回一个指针,这是正确的:auto* v = f() 或 auto v = f()

If function f() returns a pointer, which is correct: auto* v = f() OR auto v = f()?

本文关键字:auto 返回 函数 一个 如果 指针      更新时间:2023-10-16

我几乎到处都使用 c++11 auto 关键字。不过,我不确定在这种情况下我是否正确使用它。请考虑以下简单示例:(http://ideone.com/TxLJlx)

#include <iostream>
const char* f()
{
    return "Hello";
}
int main()
{
    auto  s1 = f();
    auto* s2 = f();
    std::cout << s1 << std::endl;
    std::cout << s2 << std::endl;
    return 0;
}

autoauto*似乎都在工作,并且似乎在做同样的事情。这个假设是错误的吗?

为什么两者给出相同的结果?

在这种情况下,auto的正确用法是什么?

它们的意思相同 - 在两种情况下,类型都将const char*。但是,使用 auto * 会强调(和自我记录)f()返回指针的事实。如果稍后将函数更改为返回其他内容(例如 std::string在这种情况下)。

使用哪个主要是风格问题。如果代码严重依赖f()返回指针,或者您觉得有必要使其显而易见,请使用 auto* 。否则,只需使用auto并完成它。

请注意,返回引用时的大小写是不同的。这些被auto扣除删除,因此如果您需要将返回的引用作为引用,则必须使用auto &(或使用auto &&来获取通用引用)。

auto  s1 = f();

您可以使用auto,以便编译器可以随时推断出适当的类型,而无需自己这样做。 不管它是否是指针,因为它是类型的一部分,所以你不必担心。

auto为您

完成任何类型的类型,如果您指定了指针( * ) 它剩下的就是完成char(或者如果没有可用的补全会导致错误,例如,如果f()返回一个普通char)。

你应该打扰指针,只需使用auto.