我制作了一个模板,可以添加给定的数据。如果我像这样使用它,编译器会将in_1和in_2声明为const char *,此时代码无法编译。
如果我声明in_1和in_2为std::string,它会像魅力一样运作。
为什么编译器不能(或不会)自动声明这些字符串为std::string?
#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?
std::string
,而是const char(&)[N+1]
(其中N是字符串的长度)。 - user529758std::string operator"" _s(const char * str, size_t len) { return std::string{str, len}; }
- Mark