我不太明白这里发生了什么。这是非常简单的代码:
#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
我无法解释这一点,但我想一定有一些非常简单的解释。
谢谢!
证明: