2
我不太明白這裏發生了什麼。這是非常簡單的代碼:C++未修改的布爾數組更改(OS X)
#include <iostream>
#include <sstream>
using std::endl;
using std::cout;
using std::string;
using std::ostringstream;
template <unsigned int N>
struct byte_t {
bool bits[N];
byte_t() {
for (int n = N; n > 0; n--)
bits[n] = false;
cout << "Created " << N << "-bit byte: " << str() << endl;
}
string dstr() {
ostringstream ss;
for (int n = N; n > 0; n--)
if (bits[n] == true) ss << '1';
else ss << '0';
return ss.str();
}
string str() {
ostringstream ss;
for (int n = N; n > 0; n--)
ss << bits[n];
return ss.str();
}
};
int main(int argc,char** argv) {
byte_t<8> my_byte;
cout << my_byte.str() << endl;
cout << my_byte.str() << endl;
cout << my_byte.dstr() << endl;
return 0;
}
現在這裏是預期的結果,和什麼出來的IDEOne(見http://ideone.com/JL0m4R):編譯後
Created 8-bit byte: 00000000
00000000
00000000
00000000
奇怪的是在我的Mac(10.8.4)與
g++ -o byte byte.cc
這是輸出我得到:
Created 8-bit byte: 00000000
00000000
240000000
10000000
我無法解釋這一點,但我想必須有一些非常簡單的解釋。
謝謝!
證明:
提示:輸出您正在寫入的數組索引 – PlasmaHH
另外,爲什麼'int n = N'?考慮當'N'持有大於'int'的值時可以保持。只需使用一個無符號類型(來匹配你的模板參數),並從99%的其他循環中計數0。 :) – GManNickG
感謝您的意見。愚蠢的錯誤。是的,更好,我同意。謝謝! – o1iver