gpt4 book ai didi

C++ 非修改 bool 数组更改 (OS X)

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:09 25 4
gpt4 key购买 nike

我不太明白这是怎么回事。这是非常简单的代码:

#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

我无法解释这个,但我想一定有一些非常简单的解释。

谢谢!

证明:

enter image description here

最佳答案

您正在数组边界之外写入和读取,因此有未定义的行为

请记住,大小为 N 的数组具有从 0N - 1 的索引。

关于C++ 非修改 bool 数组更改 (OS X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com