与@ari 的回答类似,我想说已经有一个提升解决方案,boost::array 解决您的问题:
boost::array<char, 8> f() {
boost::array<char, 8> bin;
for(int i = 7; i >= 0; i--) {
int ascii = 'a';
if(2 ^ i-ascii >= 0) {
bin[i] = '1';
ascii = 2 ^ i-ascii;
} else {
bin[i] = '0';
}
}
}
...
boost::array<char, 8> a(f());
[虽然我不确定你想用那个算法做什么,但请注意我认为你想做1 << i(按位移位)而不是2 ^ i,这是不是 C++ 中的幂运算。]
Boost 数组是一个普通数组,只是包装在一个结构体中,因此不会损失任何性能。它也将在下一个 C++ 版本中作为std::array 提供,如果您不需要它添加的begin()/size()/data()-sugar(作为容器),那么您自己很容易做到.就用最基本的吧:
template<typename T, size_t S>
struct array {
T t[S];
T& operator[](ptrdiff_t i) { return t[i]; }
T const& operator[](ptrdiff_t i) const { return t[i]; }
};
但像往常一样,使用其他人已经编写的工具,在本例中为boost::array。它还具有聚合的优点(这就是它没有用户声明的构造函数的原因),因此它允许使用大括号括起来的列表进行初始化:
boost::array<int, 4> a = {{ 1, 2, 3, 4 }};