C++ “如何修理”;类型为';常量字符';到二进制';操作员+';?

C++ “如何修理”;类型为';常量字符';到二进制';操作员+';?,c++,concatenation,std,C++,Concatenation,Std,可能重复: 根据C++ STD::String,使用Talk+进行连接。 那么为什么这个代码 using namespace std; string sql = "create table m_table(" + "path TEXT," + "quality REAL," + "found INTEGER);"; 导致这个错误的原因是什么 “const char[22]”和“const char[17]”类型的操作数对 二进制“运算符+” 您需要将其显式转换为字

可能重复:

根据C++ STD::String,使用Talk+进行连接。 那么为什么这个代码

using namespace std;
string sql = "create table m_table(" + 
    "path TEXT," +
    "quality REAL," +
    "found INTEGER);"; 
导致这个错误的原因是什么

“const char[22]”和“const char[17]”类型的操作数对 二进制“运算符+”


您需要将其显式转换为字符串以匹配参数列表:

string sql = std::string("create table m_table(") + 
"path TEXT," +
"quality REAL," +
"found INTEGER);"; 

现在,第一个是一个与
常量char[N]
匹配的字符串,该字符串与
操作符+
重载之一匹配,并返回一个新的
std::string
,该字符串用于对其余部分重复该过程。

chris说了什么,但在这种特殊情况下,您可以这样做

string sql = "create table m_table("
    "path TEXT,"
    "quality REAL,"
    "found INTEGER);"; 

它将在编译时连接字符串。

更好的方法是使用std::ostringstream

#include <sstream>

const std::string myFunc(const std::string& s1, const std::string& s2)
{
  std::ostringstream os;
  os<<s1<<" "<<s2;
  return os.str();
}
#包括
常量std::string myFunc(常量std::string&s1,常量std::string&s2)
{
std::ostringstream os;

OSITS不是C++字符串对象,而是C字符串。字符串文本是C字符串。+ 1,但是请看我对这种情况的评论。请原谅我的无知,但是你能做<代码> STD::字符串SQL = /*字符串文字*/<代码>?@ MichaelKrelin hacker,是的,非常好的点。Reabl作为前两个参数之一,在这种情况下,您需要显式转换一个,但这里不适用。“克里斯,是的,这就是为什么我这样说的原因。特别是,对于<代码> SQL < /代码>,我更喜欢参数化查询;”JjkNad,我真的会考虑接受米迦勒的回答。它对您的情况更好地适用于THA。n这是因为它们都是文本。如何“更好”地使用heckuvalotta资源?能够将其他类型组合到字符串中是很有用的,但我认为没有必要改变简单的字符串连接来实现这一点。我认为使用运算符+并仅使用
std::to_string()
或类似函数是一种更好的方法:
“hello”+std::to_string(50)
。词法\u cast甚至允许您对任何具有ostream
运算符的类型执行此操作,如果您只需要连接多个字符串和/或(通过使用std::wostringstream)更好需要处理宽字符字符串等。STL中的stringstream类是专门为这些类型的用例提供的,扩展了iostreams范式。用于格式、精度、宽度等的std::ostream语义也可以在这里发挥作用。@mohaps:好吧,我会避免使用讨厌的实现定义的宽字符;最好的方法是我不希望有可移植的程序。@MatthieuM.Amen!:)但是在一个足够大的代码库中,有讨厌的第三方遗留库…最好提前计划,并考虑可怕的wchar_t内容。是的。这适用于一组常量字符串,我将在本例中使用,但我可能还需要Chris对插入m_选项卡中的
所说的内容le
case有变量,但我忽略了提到它。@jacknad,只要这些变量是
std::string
s,您就可以执行类似
string s=“abc”“def”+otherString+“ghi”的操作在C++期间没有接触C++。在C、java、C、瓦拉河、Python等之间,我的头在旋转。但是每个都有它自己的魅力。是的,+考虑参数化查询。<代码> C++ >代码>是最有魅力的!!)