Questions tagged «static-code-analysis»

2
如何找到C ++伪复制操作?
最近,我有以下 struct data { std::vector<int> V; }; data get_vector(int n) { std::vector<int> V(n,0); return {V}; } 此代码的问题在于,当创建该结构时,会发生复制,而解决方案是写return {std :: move(V)} 是否有lint或代码分析器可以检测到这种虚假的复制操作?cppcheck,cpplint或clang-tidy都无法做到这一点。 编辑:几点使我的问题更清楚: 我知道发生了复制操作,因为我使用了编译器浏览器,并且显示了对memcpy的调用。 通过查看标准yes,我可以确定发生了复制操作。但是我最初的错误想法是编译器将优化此副本。我错了。 这(可能)不是编译器问题,因为clang和gcc都产生产生memcpy的代码。 memcpy可能很便宜,但我无法想象在比复制std :: move指针更便宜的情况下,复制内存和删除原始内存是比较便宜的。 std :: move的添加是基本操作。我可以想象一个代码分析器将能够建议这种纠正。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.