我正在关注Boost网站上的“入门”tutorial。我正在尝试使用以下命令构建分离编译的库:
./bootstrap.sh
然后
./b2
在建设期间,我收到了很多(如数百个)警告:
./boost/...whatever.hpp:linenumber: warning: dereferencing pointer ‘...’ does break strict-aliasing rules
我想知道我是否有问题,是否可以采取措施摆脱这些警告?
感谢。
(Boost 1.48,Ubuntu 10.04.3 LTS)
答案 0 :(得分:1)
Cellperformance表示严格别名是:
[...]由C(或C ++)编译器做出的假设, 取消引用指向不同类型对象的指针永远不会 引用相同的内存位置(即别名别名。)
当启用-fno-strict-aliasing
和优化(-O2
或更高版本)时会发生此警告,因为编译器在访问(可能)别名内存时需要更加保守。这导致较少的优化 - 编译器不能例如确保元素不重叠(参见上面发布的文章中的例子)。
这不是你应该担心的警告 - Boost开发人员可能已经意识到这一点并且有充分的理由说明为什么这样做。