はい、いいえ。
std::string
はタイプchar
のオブジェクトが含まれているので、タイプchar
の符号の有無は、その動作に影響を与えることができます。
あなたの問題のプログラム:(任意の出力を生成せずに終了すると「行動」である場合を除く)
#include <string>
int main()
{
char c = -1;
std::string s{1, c};
}
は、目に見える行動を持っていないので、その動作は、プレーンchar
の符号の有無に依存しません。コンパイラはmain
の本文全体を合理的に最適化することができます。 (私は確かにあなたが求めている問題ではなく、選んだのコード例にコメント、ここでつべこべしています。)
しかし、このプログラム:
#include <iostream>
#include <string>
int main() {
std::string s = "xx";
s[0] = -1;
s[1] = +1;
std::cout << "Plain char is " << (s[0] < s[1] ? "signed" : "unsigned") << "\n";
}
が正しく印刷されますがどちらかPlain char is signed
かPlain char is unsigned
。使用して2つのstd::string
オブジェクトを同様のプログラムを比較し
なお、タイプのoperator<
ないは、彼らが道Cのmemcmp
作品と同様に、符号なしであるかのように、プレーンchar
が<
扱いするので、文字を符号の有無を区別ありません。
これは99%の時間に関係しません。あなたは、確かに、その動作が符号つき度(char
)に依存するコードを書くためにあなたの道から出なければなりません。実装定義であることに注意してください。ただし、署名の重要性がある場合は、signed char
または(可能性が高い)unsigned char
を明示的に使用する必要があります。 char
は数値型ですが、文字データを保持するために使用する必要があります。
はい、 'std :: sring'のセマンティクスに影響します。 – SergeyA
セマンティクスの変化が何を意味するのかを具体的に説明できますか? – juanchopanza
あなたは具体的になりますか? @SergeyA – user6331143