簡體   English   中英

變異和C ++ lambda

[英]Mutations and C++ lambdas

試圖用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的內容時,正在打印mask的值,比如說net應該是“ 10.0.0.0”,而mask應該是“ 255.255.255.0”。

我認為這與用於變量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

從手冊中:

inet_ntoa()函數將Internet主機地址(以網絡字節順序指定)轉換為IPv4點分十進制表示形式的字符串。 該字符串在靜態分配的緩沖區中返回,后續調用將覆蓋該緩沖區。

netmask都將指向相同的緩沖區,並且當然,緩沖區將包含上一次調用的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM