我想在大型 c++ 项目的代码库中找到移动构造函数。简单地查找“&&”是行不通的,因为它匹配了很多“逻辑与”运算符。
有什么方法可以更精确地为移动构造函数 grep?
有什么方法可以使用 Visual Studio(在 Windows 上)或 XCode(在 Mac 上)搜索移动构造函数?
我想在大型 c++ 项目的代码库中找到移动构造函数。简单地查找“&&”是行不通的,因为它匹配了很多“逻辑与”运算符。
有什么方法可以更精确地为移动构造函数 grep?
有什么方法可以使用 Visual Studio(在 Windows 上)或 XCode(在 Mac 上)搜索移动构造函数?
看起来像是正则表达式的工作。在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 中正则表达式的更多信息: