c – 为什么“auto”将字符串声明为const char *而不是std :: string?

我制作了一个模板,用于添加给出的数据.如果我像这样使用它,编译器将in_1和in_2声明为const char *,并且代码不会编译.

#include <iostream>
using namespace std;
template <class T>
T addstuff(T part_1, T part_2){
    return(part_1+part_2);
}

int main(int argc, char const *argv[])
{
    auto in_1="Shut ";
    auto in_2="up.";
    cout<<addstuff(in_1, in_2)<<endl;
    return 0;
}

如果我声明in_1和in_2 std :: string,它就像魅力一样.

为什么不能(或不)编译器自动声明这些字符串std :: string?

最佳答案
你无法“写”到你的auto变量的原因是它是一个const char *或const char [1],因为这是任何字符串常量的类型.

auto的要点是解析为“分配”类型“有效”的最简单的类型.编译器没有“期待看到你对变量做了什么”,所以它不明白以后你会想要写入这个变量,并用它来存储一个字符串,所以std :: string会更有意义.

您可以使代码以多种不同的方式工作,这是一个有意义的方法:

std::string default_name = "";
auto name = default_name;

cin >> name;

转载注明原文:c – 为什么“auto”将字符串声明为const char *而不是std :: string? - 代码日志