如何从另一个函数访问布尔数组? C++
Posted
技术标签:
【中文标题】如何从另一个函数访问布尔数组? C++【英文标题】:How do I access boolean array from another function? c++ 【发布时间】:2022-01-18 16:32:11 【问题描述】:我有问题。我需要创建一个代码,我可以在其中从另一个函数访问 bool 数组信息,编辑数组,然后将其发回。我需要使用一个变量作为数组的大小。
全局变量不是一个选项。
我尝试通过引用传递它并使用结构。
代码示例:
void x(bool (&reserved[sizeOfArray))
if (reserved[1] == true)
cout << "it's true";
main()
int sizeOfArray = 6;
bool reserved[sizeOfArray];
x(reserved[sizeOfArray];
编辑:数组的大小在程序已经运行时确定
【问题讨论】:
这不是有效的 C++ 代码。 如果数组大小需要是一个变量,那么你最好的选择是std::vector
,C++不支持变长数组
数组的名称是“reserved”,而不是“reserved[sizeOfArray]”。 reserved[sizeOfArray]
将是 bool
,如果它存在的话。
如果你想使用最易读的 C++ 语法:std::array您可以将boost::dynamic_bitset
用于布尔的动态向量。 [Demo]
#include <boost/dynamic_bitset.hpp>
#include <iostream> // cout
void x(const boost::dynamic_bitset<>& reserved)
if (reserved[1] == true)
std::cout << "it's true\n\n";
for (int i0; i < reserved.size(); ++i)
std::cout << "Bit " << i << ": " << reserved[i] << "\n";
int main()
int sizeOfArray = 6;
boost::dynamic_bitset<> reserved(sizeOfArray, 0b111010);
x(reserved);
【讨论】:
【参考方案2】:你可以把它做成一个函数模板,以数组大小作为模板参数:
#include <iostream>
template<size_t N>
void x(bool (&reserved)[N])
// make sure that the array size is at least 2 to not get out of
// bounds access in reserved[1]:
if constexpr (N >= 2)
if (reserved[1] == true)
std::cout << "it's true\n";
int main()
constexpr size_t sizeOfArray = 6; // must be a constant expression
bool reserved[sizeOfArray]false,true; // rest will be false
x(reserved);
输出:
It's true
【讨论】:
使用 std::span 怎么样? @vikram 当然,这也可以,但上面的内容非常接近 OP 在他/她的代码中已经包含的内容——无论好坏。 我同意这一点,我喜欢你的回答。但是 std::span 使代码不那么令人生畏和更清晰。也许只是个人意见。 @vikram 我也喜欢span
方法。哦,你添加了一个答案。在这里,有一个upvote :)【参考方案3】:
我认为轻量级的方法是使用 std::span 代替。
#include <iostream>
#include <span>
void x(std::span<bool> reserved)
reserved[1] = false;
int main()
constexpr size_t sizeOfArray = 6;
bool reserved[sizeOfArray]false, true;
x(reserved);
if (reserved[1] == false)
std::cout << "Hello!" << std::endl;
【讨论】:
【参考方案4】:如果大小仅在运行时确定,您基本上有两种选择:
使用动态大小的容器,例如std::vector
void x(std::vector<bool>& reserved)
使用“C 方法”将指向数组第一个元素的指针与数组大小一起传递void x(bool reserved[], size_t size)
可能的第三个选项是在数组中最后一个“哨兵”值(如 C 字符串)不适用于 bool
,因为您只有两个值可供选择。
【讨论】:
以上是关于如何从另一个函数访问布尔数组? C++的主要内容,如果未能解决你的问题,请参考以下文章