我想在大型c ++项目的代码库中找到移动构造函数。只需点击"&&"不起作用,因为它匹配很多逻辑和'运营商。
有什么方法可以更精确地为移动构造函数grep?
使用Visual Studio(在Windows上)或XCode(在Mac上)搜索移动构造函数的任何方法?
答案 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中正则表达式的更多信息,请访问: