所以,我有这个代码:
uint8_t* pbytes = pkt->iov[0].iov_base;
Run Code Online (Sandbox Code Playgroud)
这会创建一个指向结构中以太网数据包开头的指针.
我要求我的朋友查看代码,他说:"你不是在修改它,如果你这样做会很混乱,所以把它变成const".
这似乎是一个好主意,所以:
const uint8_t* pbytes = pkt->iov[0].iov_base;
Run Code Online (Sandbox Code Playgroud)
甚至:
const uint8_t * const pbytes = pkt->iov[0].iov_base;
Run Code Online (Sandbox Code Playgroud)
而现在我在思考,我打赌有很多其他地方我可以做到这一点,我敢打赌,编译器会比找我更好.
我是怎么问这个问题的?(gcc首选,但使用不同的编译器或linting工具没问题,只要它们可以在unix上运行).
Mal*_*ean -2
const 传播。事实上,它经常成为一个问题,被称为“const 中毒”。问题是像 strchr() 这样的函数,可以使用 const 指针或变量指针来调用。但如果它返回一个 const *,则无法通过指针修改字符串,而这通常是您想要做的。
但是,如果您在读入/初始化常量数据后立即将其设置为常量,则每次您尝试传递到非常量限定上下文时,编译器都会向您抛出错误。