[英]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點分十進制表示形式的字符串。 該字符串在靜態分配的緩沖區中返回,后續調用將覆蓋該緩沖區。
net
和mask
都將指向相同的緩沖區,並且當然,緩沖區將包含上一次調用的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.