问询检测auto遗漏引用符号的编译器选项与clang-tidy检查
检测auto遗漏引用符号的编译器选项与clang-tidy检查项
clang-tidy检查项
可以用performance-unnecessary-copy-initialization检查项,它能检测出用auto声明变量时,本可以绑定引用却做了值拷贝的场景——正好对应你代码里auto a = test(10)遗漏&导致拷贝的问题。
启用时,要么在clang-tidy配置里加这个检查项,要么命令行直接指定:
clang-tidy your_code.cpp -checks=performance-unnecessary-copy-initialization
针对你的示例代码,它会给出这样的提示:
warning: unnecessary copy initialization of 'a' from a reference type 'int &' [performance-unnecessary-copy-initialization]
auto a = test(10);
^ ~~~~~~~~~~
&
编译器警告选项
目前没有专门针对这个场景的单一编译器选项,但可以开一些严格警告间接排查:
- Clang:开
-Wpessimizing-move(配合-Werror强制告警),它主要管移动语义被优化成拷贝的情况,但部分类似的不必要拷贝也会被揪出来;别直接用-Weverything,会炸出一堆无关警告。 - GCC:开
-Wextra -Wconversion组合,虽然不会直接盯auto漏&的情况,但能捕获一些潜在的不必要拷贝或类型转换问题,帮你发现这类疏漏。
内容的提问来源于stack exchange,提问作者Ahmad Mansoori
相关产品推荐
相关产品推荐

