10

重複の可能性:
1行に複数のC ++文字列を連結するにはどうすればよいですか?

これによると、C ++ std::stringはoperator+を使用して連結されます。なぜこのコードを実行するのですか

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

このエラーを引き起こしますか?

'constchar[22]'および'constchar[17]'型の無効なオペランドからバイナリ'operator+'

4

3 に答える 3

14

クリスが言ったこと、しかしこの特定のケースではあなたはすることができます

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

これは、コンパイル時に文字列を連結します。

于 2012-10-05T18:18:42.900 に答える
12

引数リストと一致するように、明示的に文字列に変換する必要があります。

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

これで、最初の文字列は、と一致する文字列になります。これはconst char[N]、オーバーロードの1つと一致しoperator+、新しいを返しますstd::string。これは、残りのプロセスを繰り返すために使用されます。

于 2012-10-05T18:16:10.150 に答える
1

より良い方法は、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 :: ostream <<演算子のオーバーロードを使用して、文字列以外の値も文字列化できることです。

于 2012-10-05T18:25:55.767 に答える