变异和C ++ lambdas

时间:2015-12-27 10:17:26

标签: c++ lambda

尝试在C ++中进行函数式编程,并通过某种变异规则获取。

我有这段代码:

  bpf_u_int32 netp, maskp;
  struct in_addr addr;
  // ...code
  auto set_address_string = [&](auto &do_assign) {
    if ((do_assign = inet_ntoa(addr)) == NULL)
      cerr << "error - inet_ntoa() failed" << endl;
    else
      cout << "Some IP: " << do_assign << endl;
  };

  char *net, *mask;
  addr.s_addr = netp;
  set_address_string(net);
  addr.s_addr = maskp;
  set_address_string(mask);
  cout << string(net) << endl;

当我预期net的内容被打印时,打印掩码的值,说net应该是“10.0.0.0”,掩码应该是“255.255.255.0”。

我认为这与&amp; amp;我用变量do_assign?

编辑:

实际输出为:

Some IP: 10.0.0.0
Some IP: 255.255.255.0
255.255.255.0

但预计是:

Some IP: 10.0.0.0
Some IP: 255.255.255.0
10.0.0.0

1 个答案:

答案 0 :(得分:4)

从手册:

  

inet_ntoa()函数转换给定的Internet主机地址   以网络字节顺序,以IPv4点分十进制表示法的字符串。   该字符串在静态分配的缓冲区中返回,该缓冲区   后续调用将覆盖。

netmask都指向同一个缓冲区,当然,缓冲区将包含最后一次调用的结果。