如何使用grep或IDE在代码库中查找移动构造函数?

时间:2014-07-11 01:44:52

标签: c++ move-constructor

我想在大型c ++项目的代码库中找到移动构造函数。只需点击"&&"不起作用,因为它匹配很多逻辑和'运营商。

有什么方法可以更精确地为移动构造函数grep?

使用Visual Studio(在Windows上)或XCode(在Mac上)搜索移动构造函数的任何方法?

1 个答案:

答案 0 :(得分:5)

看起来像正则表达式的工作。在 Visual Studio 中,按 ctrl + F 。在搜索弹出窗口中,激活选项“使用正则表达式”(或在搜索行处于活动状态时按 alt + E )。然后键入以下表达式:

\b\w+\s*[\(]\s*(const)*\s*(volatile)*\s*\w+\s*[&][&]\s*[\)]

它会找到任何形式的字符串:

class_name(class_name&&)
class_name(const class_name&&)
class_name(volatile class_name&&)
class_name(const volatile class_name&&)

如:

中所述

http://en.cppreference.com/w/cpp/language/move_constructor

如果class_name,括号和const等关键字之间有任意数量的空格,表达式也有效。

如果您希望它也适用于命名变量,例如:

class_name(class_name&& variable_name)

足以稍微修改它:

\b(\w+)\s*[\(]\s*(const)*\s*(volatile)*\s*\1\s*[&][&]\s*\w*\s*[\)]

编辑:作为OP请求的答案,我已经修改了上面的正则表达式,现在它使用了反向引用。 '\ 1'表示“查找由括号中的第一个表达式捕获的相同表达式” - 第一个表达式是(\ w +),这是示例中的第一个' class_name '移动上面的构造函数。这确保了这个家伙两边都有相同的字符串:'('。总结一下:另外一对括号,'\ 1'和魔法发生。

有趣的是,微软没有提到VS支持反向引用。

有关Visual Studio中正则表达式的更多信息,请访问:

http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx