如果函数f()返回一个正确的指针:auto * v = f()OR auto v = f()?

时间:2014-01-01 07:41:01

标签: c++ c++11 auto

我在任何地方都使用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的正确用法是什么?

3 个答案:

答案 0 :(得分:14)

它们的含义相同 - 两种情况下的类型都是const char*。但是,使用auto *强调(和自我文档)f()返回指针的事实。如果稍后更改该函数以返回其他内容(例如,在这种情况下为std::string),则会发出错误信号。

使用哪个主要是风格问题。如果代码严重依赖于f()返回指针,或者您认为需要明确这一点,请使用auto*。否则,只需使用auto即可完成。

请注意,返回引用时的情况有所不同。这些内容会被auto扣除所取消,因此如果您需要将返回的引用作为参考,则必须使用auto &(或使用auto &&来获取通用引用。)< / p>

答案 1 :(得分:3)

auto  s1 = f();

您使用auto,以便编译器可以随时推断出适当的类型,而不必为此而烦恼。它是否是一个指针是照顾因为它是类型的一部分所以你不必担心这一点。

答案 2 :(得分:2)

auto为您完成任何类型,如果您指定了指针(*),其左侧要完成的是char(或将导致如果没有可用的完成,则会出现错误,例如f()返回普通char)。

您应该使用指针,只需使用auto