7

私は、問題を示す最小の完全な形式 (質問をすることに関しては善良な市民であること) で、基本的に次のように要約されるいくつかのコードを持っています。

#include <string>
#include <iostream>
int main (void) {
    int x = 11;
    std::string s = "Value was: " + x;
    std::cout << "[" << s << "]" << std::endl;
    return 0;
}

そして、私はそれが出力されることを期待しています

[Value was: 11]

代わりに、私はただ得ています:

[]

何故ですか?文字列を出力できないのはなぜですか? 文字列は空白ですか?coutなんか壊れてる?私は気が狂ったのですか?

4

5 に答える 5

8

"Value was: "タイプconst char[12]です。それに整数を追加すると、その配列の要素を効果的に参照しています。効果を確認するには、 に変更x3ます。

std::stringを明示的に構築する必要があります。std::string繰り返しますが、と整数を連結することはできません。これを回避するには、次のように記述しますstd::ostringstream

#include <sstream>

std::ostringstream oss;
oss << "Value was: " << x;
std::string result = oss.str();
于 2011-02-03T06:15:28.093 に答える
4

おもしろい :) それは、C 互換性と組み込みの欠如のために支払うものstringです。

とにかく、それを行うための最も読みやすい方法は次のようになると思います:

std::string s = "Value was: " + boost::lexical_cast<std::string>(x);

lexical_cast戻り値の型がstd::stringここにあるため、適切なオーバーロード+が選択されます。

于 2011-02-03T07:49:33.573 に答える
4

そのような文字ポインターと整数を追加することはできません (追加できますが、期待どおりにはなりません)。

最初に x を文字列に変換する必要があります。itoa 関数を使用して整数を文字列に変換することにより、帯域外で C の方法で行うことができます。

char buf[5];
itoa(x, buf, 10);

s += buf;

または、sstream を使用した STD の方法:

#include <sstream>

std::ostringstream oss;
oss << s << x;
std::cout << oss.str();

または直接 cout 行で:

std::cout << text << x;
于 2011-02-03T06:13:17.513 に答える
2

+C/C++ では、演算子を使用して文字配列に整数を追加することはできません。これは、char配列がポインターに減衰するためです。を に追加するintにはstring、次を使用しますostringstream

#include <iostream>
#include <sstream>

int main (void) {  
  int x = 11;
  std::ostringstream out;
  out << "Value was: " << x;
  std::string s = out.str();
  std::cout << "[" << s << "]" << std::endl;
  return 0;
}
于 2011-02-03T06:16:09.157 に答える
2

C++ は + 演算子を使用して文字列を連結しません。データ型から文字列への自動プロモートもありません。

于 2011-02-03T06:13:40.680 に答える