评论说这net/if.h是GNU C库的一部分,并称linux/if.h它是"LINUX操作系统的TCP/IP协议套件的实现".
但为什么有两个,每一个有什么用?
“ip xfrm state add”命令中的选择器(参数sel)实现什么功能?
源地址和目标地址(以及端口和协议等附加参数)在 ID 部分中设置,但选择器包含这些参数的补充集。例子:
ip xfrm state add src 10.0.0.1 dst 10.0.0.2 proto esp spi 123456 sel src 10.0.0.3 dst 10.0.0.4 enc blowfish 0xaabbccddee
Run Code Online (Sandbox Code Playgroud)
这导致以下结果:
src 10.0.0.1 dst 10.0.0.2
proto esp spi 0x0001e240 reqid 0 mode transport
replay-window 0
enc cbc(blowfish) 0xaabbccddee
sel src 10.0.0.3/32 dst 10.0.0.4/32
Run Code Online (Sandbox Code Playgroud)
Setkey 似乎没有机会添加这样的选择器值。它也不在输出中显示选择器。上面的 xfrm 命令产生以下“setkey -D”输出:
10.0.0.1 10.0.0.2
esp mode=transport spi=123456(0x0001e240) reqid=0(0x00000000)
E: blowfish-cbc aabbccdd ee
seq=0x00000000 replay=0 flags=0x00000000 state=mature
created: Nov 26 01:25:39 2013 current: Nov 26 01:26:07 2013
diff: …Run Code Online (Sandbox Code Playgroud) 我需要存储一些键/值对并再次通过键引用它们 - 不一定在地图中,尽管这看起来很自然.此外,如果地图超过一定的大小,我需要删除最旧的对.
有没有办法使用地图或类似的结构以某种方式在C++ 11中组合地图和队列来实现它?
更新:我想用这个std::unsorted_map.不幸的是,我非常缺少std::map有用的功能.无序列表似乎既不支持rbegin()也不支持--运算符,因此我也不能使用它们end().
有没有比循环迭代更好的方法size()-1?
我正在编写代码(使用GCC 4.7.2),在测试阶段,我在代码的无数位置过度记录内容.这些记录应该在发布二进制文件上消失.
我正在通过一个函数进行日志记录void log(std::string msg);.由于这些函数调用很多并且通过许多文件中的整个代码进行分发,因此我有了使其成为内联函数的想法,并为发布二进制文件赋予它一个空体.
不,我的问题是:编译器用它做什么?二进制文件是否仅包含没有函数的其余代码,是否包含a nop或其他任何内容?我可以通过清空内联日志记录功能完全消除二进制文件中的日志代码吗?
我不仅对解决问题的答案感兴趣,而且我对编译器的行为本身也很好奇.
我想有条件地构造没有默认构造函数的类成员。基本上我想在类构造函数中执行以下操作:
class X{
public:
X(Config config) {
if (config.getBool) memberA("yes");
else memberA("no");
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如前所述, 的类没有默认构造函数memberA,因此编译器无法构造它,从而导致错误。显然我可以这样做:
class X{
public:
X(Config config) : memberA("yes") {
if (!config.getBool) memberA = MemberAClass("no");
}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种方法可以使用 if 子句构造成员,但无需调用构造函数两次,以防止类的静态成员产生副作用。
更新:我忘了提到我实际上需要两个参数,但原理仍然有效:
X::X(Config cfg):member(cfg.getBool()?"yes":"no",cfg.getBool()?1:2){};
Run Code Online (Sandbox Code Playgroud)