我最近在C程序中遇到了一个奇怪的语法。
struct connector_agent_api{
bool (*receive)(slot *s, uint8_t *data, uint8_t length);
}
Run Code Online (Sandbox Code Playgroud)
“接收”是一个函数指针吗?
如果它是一个函数指针,为什么它有命名参数?应该是下面的样子吗?
bool (*receive)(slot *, uint8_t *, uint8_t);
Run Code Online (Sandbox Code Playgroud)
它当然可以编译并在库中使用。我在互联网上进行了大量搜索,并试图证明这种语法的合理性。我仍然不知道为什么这个东西可以编译... :(
我试图在下面的“while”循环中擦除双端队列中的多个元素,但我的程序没有给出正确的结果。
packet_deque包含 9 个Packet对象 - 其中一些已发送,其他未发送。
#include <deque>
#include <iostream>
class Packet
{
public:
void set_sent() { sent = true; };
bool get_sent() { return sent; };
private:
/* members of Test class */
bool sent = false;
};
int main()
{
size_t MAX = 9;
std::deque<Packet> packet_deque(MAX);
unsigned int i = 0;
std::deque<Packet>::iterator itr = packet_deque.begin();
printf("Before erasing sent packets - packet_dequeue size: %d \n", packet_deque.size());
// initialise the packet queue - creating some sent …Run Code Online (Sandbox Code Playgroud) 关于位集参考的两个问题:
Q1。有什么方法可以返回类私有成员位集?在下面的代码片段中(接着输出),我尝试使用常规引用,但它甚至都不会修改Foo类中的bitset成员。
Q2。从这个问题的答案中,我了解到常规引用没有足够的粒度指向存储的单个位,bitset因为bitset它们以更紧凑的形式存储。但是,如果这是真的,我的代码又如何能够修改该行中b3的第一位b3[1] = 0?
#include <iostream>
#include <bitset>
using namespace std;
class Foo
{
private:
bitset<4> b1;
public:
inline void print_value()
{
cout << "The bitset b1 is: ( "<< b1 << " )" << endl;
}
inline void set_all() { b1.set(); }
inline bitset<4> get_b1() { return b1; }
inline bitset<4>& get_b1_ref() { return b1; }
};
int main()
{
Foo f;
f.print_value();
f.set_all();
f.print_value();
auto b2 = f.get_b1();
b2.flip(); …Run Code Online (Sandbox Code Playgroud)