gpt4 book ai didi

c++ - 为什么 "auto"将字符串声明为 const char* 而不是 std::string?

转载 作者:可可西里 更新时间:2023-11-01 16:36:54 32 4
gpt4 key购买 nike

我制作了一个模板,其中添加了给定的数据。如果我这样使用它,编译器会将 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?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869418/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com