C++ 将const char*转换为不带构造函数的std::string

C++ 将const char*转换为不带构造函数的std::string,c++,string,c-strings,C++,String,C Strings,我一直想知道为什么不能将以null结尾的C字符串转换成std::string(没有构造函数、编写帮助函数和其他解决方法)?这似乎是一个简单且过于常见的问题,比如说,将argv[1]以null结尾的字符串作为参数传递给程序(或任何其他自然出现的C字符串),并且需要将其值直接传递给函数 即 如何在不分配新字符串对象的情况下将cstr包装到位?这是我能给出的最好答案 const char * cstr = "Hello World."; ... ..myfunc(cstr); 似乎您应该使用std:

我一直想知道为什么不能将以null结尾的C字符串转换成std::string(没有构造函数、编写帮助函数和其他解决方法)?这似乎是一个简单且过于常见的问题,比如说,将argv[1]以null结尾的字符串作为参数传递给程序(或任何其他自然出现的C字符串),并且需要将其值直接传递给函数


如何在不分配新字符串对象的情况下将cstr包装到位?

这是我能给出的最好答案

const char * cstr = "Hello World.";
...
..myfunc(cstr);

似乎您应该使用
std::string\u view
。这就是c'tor所做的,它将
const char*
转换为
std::string
。。。为什么给它起个有趣的名字?你的问题不清楚。或者你是在问是否需要复制,比如S.M.明白吗?是的,
std::string
有一个非显式构造函数,它使用
const CharT*S
参数,这并不奇怪。有时候C++是直截了当的。@ Bead坏你的问题不清楚,因为不清楚你不理解的东西。您只需从代码中删除
f
,它就可以工作(通过隐式调用字符串构造函数)。但不清楚的是,这是否满足“没有构造函数”的要求。你是说没有显式构造函数调用,还是说没有任何类型的构造函数。你可以想象,如果不在某个地方使用构造函数,就很难构造字符串。@bedbad我恐怕你错了,因为如果你读到错误消息(可能同时服用谦卑丸),你会发现它是关于将
string
转换为
const char*
而不是相反。Fwiw,这也会调用构造函数。这显然是不需要的。@bedbad错误消息中的转换没有在上面的代码段中执行。你把你的MCVE搞砸了。@贝德巴德你所抱怨的错误消息来自你代码的其他部分,而不是我上面发布的代码。我只发布完整的代码,这样就不会有任何误解。请重定向到我的其他问题。