いくつかのパズル:: Solaris上のbasic_string(x86の)いくつかのパズルのstdについて
#include <iostream>
#include <string>
int main()
{
const wchar_t* s = L"abcdef";
std::wstring ws(s, s+6);
for(int i = 0; i < ws.size(); ++i)
{
std::cout << ws[i] << std::endl;
}
return 0;
}
実行した結果は次のとおりです。
97
99
101
0
0
0
はなぜ
ではありません97
98
99
100
101
102
とコード
#include <iostream>
#include <string>
int main()
{
const wchar_t* s = L"abcdef";
std::wstring ws;
ws.resize(6);
for(int i = 0; i < ws.size(); ++i)
{
std::cout << (ws[i] = s[i]) << std::endl;
}
return 0;
}
期待される結果が得られます。 gcc 3.4.6
を使用し、ビルドコマンドはg++ -fshort-wchar stringtest.cpp
です。いずれにせよ、エクスポンションを与えることができますか?
これは興味深いです。 Windowsでは、Visual C++ 2010で最初のコードサンプルが2番目の答えを示します。 – kol
また、g ++は '-fshort-wchar'なしでビルドされたときに正しい結果を返します。それは問題を引き起こすオプションのようです。 –
"-fshort-wchar:' wchar_t'の基になる型を、ターゲットのデフォルトではなく 'short unsigned int 'にオーバーライドします。 sizeof(wchar_t)とsizeof(短い符号なしint)を知ることは有益でしょう... – kol