visual studio 中的 resharper C++ 插件快速入门指南

这篇具有很好参考价值的文章主要介绍了visual studio 中的 resharper C++ 插件快速入门指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关键词: visual studio resharper  C++  高质量代码 重构

前言

visual studio已经是极具效率的C++生产工具,但是这还不够。使用Resharper C++插件,可以更多的帮助到你。愉快转向现代C++,轻松了解C++中最棘手的方面。快速识别不会发现的错误和代码效率低下,通过安全的快速修复和强大的重构来消除它们。这些都可以通过Resharper来实现。

清单

风格与排版

自动化重构

提炼函数

变更签名

内联函数

重命名

命名审查

逐个重构

批量重构

小步快跑

代码分析

安装

官网链接:https://www.jetbrains.com/resharper-cpp/#modern-cpp

下载安装即可用

使用

一、风格与排版 ctrl + alt + enter

不必在意几个空格,什么时候换行,怎么样对齐代码等一系列问题,选择一个已有的或者自定义的规范,在键盘上按下按钮 ctrl + alt + enter,一切都变得有序。

原始代码

c++ 重构插件,c++,开发语言

按下后

c++ 重构插件,c++,开发语言

二、自动化重构 ctrl e , c

让你的代码转向现代C++,不需要你懂得更多,只需要你键盘上按下按钮ctrl + e,c,你的代码就会从旧风格转向新的风格。

旧风格

c++ 重构插件,c++,开发语言

新风格

c++ 重构插件,c++,开发语言

它是安全的,你可以打开它看到它的详细规范。

c++ 重构插件,c++,开发语言

三、提炼函数 ctrl + r ,m

结合 visual studio 的大纲视图可以让你清晰的看到框架逻辑。那么你很可能想要重构一下这段代码,这个时候你感觉不是那么容易,因为有些变量需要传递。框选你想要重构的代码,按下 ctrl + r ,m。如你所愿,它自动的生成了提炼了函数,传递了变量。

这是测试vector和map查找效率的对比代码,由AI生成,它很长,我们可以提炼两个函数。旧代码:

#include <iostream>
#include <vector>
#include <unordered_map>
#include <map>
#include <chrono>

int main() {
    const int numElements = 100000;

    // 测试 std::vector
    std::vector<int> vec;
    for (int i = 0; i < numElements; ++i) {
        vec.push_back(i);
    }

    auto start = std::chrono::high_resolution_clock::now();
    // 在 std::vector 中查找元素
    std::vector<int>::iterator vecIt = std::find(vec.begin(), vec.end(), numElements/2);
    auto end = std::chrono::high_resolution_clock::now();

    if (vecIt != vec.end()) {
        std::cout << "std::vector: Element found!" << std::endl;
    }
    else {
        std::cout << "std::vector: Element not found!" << std::endl;
    }

    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
    std::cout << "std::vector: Time taken: " << duration.count() << " microseconds" << std::endl;



    // 测试 std::unordered_map
    std::unordered_map<int, int> umap;
    for (int i = 0; i < numElements; ++i) {
        umap[i] = i;
    }

    start = std::chrono::high_resolution_clock::now();
    // 在 std::unordered_map 中查找元素
    std::unordered_map<int, int>::iterator umapIt = umap.find(numElements / 2);
    end = std::chrono::high_resolution_clock::now();

    if (umapIt != umap.end()) {
        std::cout << "std::unordered_map: Element found!" << std::endl;
    }
    else {
        std::cout << "std::unordered_map: Element not found!" << std::endl;
    }

    duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
    std::cout << "std::unordered_map: Time taken: " << duration.count() << " microseconds" << std::endl;  

    return 0;
}

操作步骤:

大纲视图:

c++ 重构插件,c++,开发语言

 在折叠了一些函数后它变得清晰一些。

函数提炼:

c++ 重构插件,c++,开发语言

第二个函数

void TestMap(const int numElements)
{
	std::chrono::steady_clock::time_point start;
	std::chrono::steady_clock::time_point end;
	std::chrono::duration<long long, std::ratio<1, 1000000>> duration;
	// 测试 std::unordered_map
	std::unordered_map<int, int> umap;
	for (int i = 0; i < numElements; ++i) {
		umap[i] = i;
	}

	start = std::chrono::high_resolution_clock::now();
	// 在 std::unordered_map 中查找元素
	std::unordered_map<int, int>::iterator umapIt = umap.find(numElements / 2);
	end = std::chrono::high_resolution_clock::now();

	if (umapIt != umap.end()) {
		std::cout << "std::unordered_map: Element found!" << std::endl;
	}
	else {
		std::cout << "std::unordered_map: Element not found!" << std::endl;
	}

	duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
	std::cout << "std::unordered_map: Time taken: " << duration.count() << " microseconds" << std::endl;
}

第一个函数

void TestVector(const int numElements)
{
	// 测试 std::vector
	std::vector<int> vec;
	for (int i = 0; i < numElements; ++i) {
		vec.push_back(i);
	}

	auto start = std::chrono::high_resolution_clock::now();
	// 在 std::vector 中查找元素
	std::vector<int>::iterator vecIt = std::find(vec.begin(), vec.end(), numElements/2);
	auto end = std::chrono::high_resolution_clock::now();

	if (vecIt != vec.end()) {
		std::cout << "std::vector: Element found!" << std::endl;
	}
	else {
		std::cout << "std::vector: Element not found!" << std::endl;
	}

	auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
	std::cout << "std::vector: Time taken: " << duration.count() << " microseconds" << std::endl;
}

四、变更签名 ctrl +r ,s

如果你想要某些变量不被传递,取消复选框,即可实现。

起一个有意义的名字很重要,非常重要,特别重要。让别人理解你的方法到底在做什么,现在,不必修改很多地方,只要一个简单的步骤就好了。那么,你看:

int main()
{
	constexpr int numElements = 100000;
	TestVector(numElements);
	TestMap(numElements);
	return 0;
}

重构之后:

#include <iostream>
#include <vector>
#include <unordered_map>
#include <map>
#include <chrono>

void TestMap(const int numElements)
{
	std::chrono::steady_clock::time_point start;
	std::chrono::steady_clock::time_point end;
	std::chrono::duration<long long, std::ratio<1, 1000000>> duration;
	// 测试 std::unordered_map
	std::unordered_map<int, int> umap;
	for (int i = 0; i < numElements; ++i)
	{
		umap[i] = i;
	}

	start = std::chrono::high_resolution_clock::now();
	// 在 std::unordered_map 中查找元素
	auto umapIt = umap.find(numElements / 2);
	end = std::chrono::high_resolution_clock::now();

	if (umapIt != umap.end())
	{
		std::cout << "std::unordered_map: Element found!" << std::endl;
	}
	else
	{
		std::cout << "std::unordered_map: Element not found!" << std::endl;
	}

	duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
	std::cout << "std::unordered_map: Time taken: " << duration.count() << " microseconds" << std::endl;
}

void TestVector(const int numElements)
{
	// 测试 std::vector
	std::vector<int> vec;
	for (int i = 0; i < numElements; ++i)
	{
		vec.push_back(i);
	}

	auto start = std::chrono::high_resolution_clock::now();
	// 在 std::vector 中查找元素
	auto vecIt = std::find(vec.begin(), vec.end(), numElements / 2);
	auto end = std::chrono::high_resolution_clock::now();

	if (vecIt != vec.end())
	{
		std::cout << "std::vector: Element found!" << std::endl;
	}
	else
	{
		std::cout << "std::vector: Element not found!" << std::endl;
	}

	auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
	std::cout << "std::vector: Time taken: " << duration.count() << " microseconds" << std::endl;
}

int main()
{
	constexpr int numElements = 100000;
	TestVector(numElements);
	TestMap(numElements);
	return 0;
}

五、内联函数 ctrl + r,i

内联是提炼函数的相反过程,将函数展开在当前调用的地方。如果有些事情可以在这里完成,那么我想要内联实现一下代码。如果你想要解除耦合,这也是一个好方法。

六、变量重命名  ctrl + r ,r

起一个有意义的名字很重要,非常重要,特别重要。当我们不断地写代码时候,会想到一些更为贴切的名字想要取代它。那么你可以安全的使用它,请注意它的提示,你可能会把名字起的和原来的其他变量名称一模一样,这会有歧义。

七、命名审查  Naming Style

给出命名建议

c++ 重构插件,c++,开发语言

遵循一些已有规范或者自定义,你可以自由的调整它

c++ 重构插件,c++,开发语言

 八、逐个重构

看到每个波浪线,可以逐个重构。你可以查看它的规范来源。

c++ 重构插件,c++,开发语言

九、批量重构 ctrl u ,l

看到每个波浪线,可以批量重构。一次性解决大量重复问题。

c++ 重构插件,c++,开发语言

 十、小步快跑 ctrl u ,l

重构要测试先行,这是必要的。编写测试用例,并实时运行它,你还在担心什么?

c++ 重构插件,c++,开发语言

按下按键就会直接运行的测试用例,实时反馈你的代码重构结果。

 十一、分析专题 ctrl + shift  + alt + a

分析你的代码,给出专家建议,高效的review 你的代码,这很好用!

c++ 重构插件,c++,开发语言

以上就是简短的介绍,希望能够帮到你。如果你有高阶玩法分享,留言给我,感谢。文章来源地址https://www.toymoban.com/news/detail-759897.html

到了这里,关于visual studio 中的 resharper C++ 插件快速入门指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Armadillo矩阵库在Visual Studio软件C++环境中的配置方法

      本文介绍在 Visual Studio 软件中配置 C++ 环境下线性代数运算库 Armadillo 的方法。   首先,我们需要在 Armadillo 库官网(https://arma.sourceforge.net/download.html)下载其源代码,直接点击下图所示红色框内部分即可。   点击上图所示位置后,将弹出一个新的下载界面; Armadi

    2024年02月06日
    浏览(29)
  • 用Visual Studio 2022的.map文件来查看C++变量在内存中的布局情况

    代码1 上述代码在Win10 X64,MSVC Release模式下编译,编译得到的二进制文件大小为 15KB 左右。 代码2 上述代码在Win10 X64,MSVC Release模式下编译,编译得到的二进制文件大小为 15KB 左右。 代码3 上述代码在Win10 X64,MSVC Release模式下编译,编译得到的二进制文件大小为 143KB 左右。

    2024年02月10日
    浏览(27)
  • Visual Studio扩展插件

            Medium、dev.to、Reddit 等一些平台上却仍有推荐贴。这些扩展中有许多是原生存在于 Visual Studio Code 中,所以可以通过设置菜单启用 / 禁用或进行控制                   设置可以通过 UI 或 JSON 配置来控制。Wesley Smits 在文中以 JSON 版本为例建议:可以通过命令

    2024年02月07日
    浏览(54)
  • Visual Studio Code 插件安装

      目录 1、在线安装 1.1 单个插件的安装 1.2 根据配置文件一次性安装多个插件 1.3 同步配置的方式 1.3.1 第一种方式使用VSCode自带的同步功能。 1.3.2 第二种方式,首先需要先安装插件 Settings Sync 2、离线安装 2.1 去官方下载离线安装包进行安装 2.2 直接把自己的扩展包拷贝到目

    2024年02月09日
    浏览(47)
  • visual studio 2022安装vsix插件

     以前的版本把扩展拖进去就可以直接安装了,2022的版本不知道是我的配置问题还是官方的设计问题,拖进去会安装文件读取   我的visual studio 版本 解决方法:使用命令安装 1、找到VS安装目录,我的是 D:developToolMicrosoft Visual Studio2022ProfessionalCommon7IDE  该目录下有个ixi

    2024年02月11日
    浏览(33)
  • Visual Studio如何使用插件改变主题

    Visual Studio自带的主题太过于枯燥,此篇文章将详细讲述如何改变主题。 此时浏览器会跳转到这个页面。选择一款自己喜欢的主题(可以搜索)点击,这里推荐 One Dark Pro 主题(本人VS里面有这个主题了,演示的时候使用Goodnight Theme)。 点开之后选择Download下载这个插件。 安装

    2024年02月02日
    浏览(33)
  • Visual Studio 安装离线插件 vsix 及常用插件

    我们在使用 VS 时,经常会在 “扩展”---“扩展管理” 中的 “Visual Studio marketplace” 中寻找适用插件,帮助提升工作效率。但是有时候无法登陆 markeplace,无法查找或安装所需插件,这时候可以手动安装离线插件,完成我们的要求。 1、先下载离线插件,插件后缀为 vsix。 2、

    2024年02月04日
    浏览(36)
  • Visual Studio Code前端开发插件推荐

    Visual Studio Code(简称VS Code)是一款轻量级且强大的开源代码编辑器,广受前端开发者的喜爱。其丰富的插件生态系统为前端开发提供了许多便利和增强功能的插件。本篇博客将向大家推荐一些在前端开发中常用且优秀的插件,并提供详细的使用说明和代码示例。 Live Server是一

    2024年02月12日
    浏览(38)
  • Visual Studio 2022安装SVN插件教程

    1. 第一步:避免踩坑,超级重要!!!关闭Visual Studio 2022应用程序;(不然插件装不上,一直转圈!) 2.第二步:下载Visual Studio 2022版本对应的SVN插件https://www.visualsvn.com/visualsvn/download/ (注意对应版本 2022版vs对应2022版插件) 3. 第三步:安装VisualSVN-VS2022-8.3.0.vsix,直接运行即

    2024年02月05日
    浏览(44)
  • Visual Studio Code 珍藏好久的插件推荐

    目录 1、Prettier - Code formatter ​2、ESLINT 3、Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 4、GitLens — Git supercharged 5、vscode-icons​编辑 6、Remote - SSH 7、Auto Rename Tag 8、Vetur 9、Path Intellisense 10、Auto Close Tag 11、ES7+ React/Redux/React-Native snippets 12、Code Spell Checker 13、npm Intelli

    2024年02月09日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包