C/C++总结

打开和关闭控制台

	::AllocConsole();//打开控制台
	freopen("CONOUT$", "w", stdout);//重定向输出到控制台
	fclose(stdout);//关闭重定向
	::FreeConsole();//销毁控制台

枚举位运算

https://www.cnblogs.com/lixiaobin/p/EnumFlags.html

std::vector获取某一个位置的迭代器

std::vector<int>  dataVector;
vector<int>::iterator iter;
iter = dataVector.begin()+4;
iter = std::advance(dataVector.begin(), 4);
iter = std::next(dataVector.begin(), 4);

单例

class FSingle
{
public:
	static FSingle* getInstance()
	{
		static FSingle GlobalInstance;
		return &GlobalInstance;
	}
	FSingle(const FSingle&) = delete;
	void operator =(const FSingle&) = delete;
private:
	FSingle()
	{

	}
};

__FILE__转换成宽字符

#define WIDE2(x) L##x
#define WIDE1(x) WIDE2(x)
#define WFILE WIDE1(FILE)//

使用std::wcout向控制台输出宽字符无法显示问题 --win7

std::wcout.imbue(std::locale("chs"));

extern "C"的作用

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

std::shared_ptr 转换

std::shared_ptr<void> vps = std::make_shared<int>(); 
auto ips = std::static_pointer_cast<int>(vps);

__FILE__只显示文件名

#include <string.h>
#define FILENAME(x) \
    strrchr(x,'\\') ? strrchr(x,'\\')+1 :x
FILENAME(__FILE__);
#define WFILENAME(x) \ //宽字节版本
    wcsrchr(x,L'\\') ? wcsrchr(x,L'\\')+1 :x;

std::wstring 与 std::wostream 以及 std::wistream 的相互转换

  std::wstring buffer;
  std::wstringstream stringStream;
  buffer = stringStream.str();  //ostream
  
  std::wstring buffer;
  std::wistringstream outBuffer(buffer);//istream

VA_ARGS宏使用

#define LOG(...) { \
fprintf(stdout, "%s:Line :%d:\t", __FILE__, __LINE__);\
fprintf(stdout, __VA_ARGS__);\
fprintf(stdout,"\n");\
}

获取所在文件以及行号

__LINE__    // 在源代码中插入当前源代码行号
__FUNCSIG__ //当前函数名
__FILE__    // 在源文件中插入当前源文件名
__DATE__    // 在源文件中插入当前的编译日期
__TIME__    // 在源文件中插入当前编译时间
__STDC__    // 当要求程序严格遵循ANSI C标准时该标识被赋值为1
__cplusplus // 当编写C++程序时该标识符被定义

_WIN32      // 在程序运行在windows系统上被定义位1
linux       // 在程序运行在linux系统上被定义位1
__x86_64__  // 在程序运行在64位系统上被定义位1
__i386__    // 在程序运行在32位系统上被定义位1

__VA_ARGS__ // 是一个可变参数的宏,这个可宏是新的C99规范中新增的,
            // 目前似乎gcc和VC6.0之后的都支持(VC6.0的编译器不支持)。
            // 宏前面加上##的作用在于,可以接受参数为0个或者多个

std::shared_ptr总结

  • 判断 shared_ptr是否空
	std::shared_ptr<TestObject> testPtr;
	if (!testPtr)
	{
		std::cout << "current point is null" << std::endl;
	}
	else
	{
		std::cout << "current point is not null" << std::endl;
	}

理由: std::shared_ptr 中重载了bool运算符

	explicit operator bool() const _NOEXCEPT
	{	// test if shared_ptr object owns no resource
		return (this->_Get() != 0);
	}
  • std::shared_ptr 的创建
class TestClass
{
public:
	TestClass()
	{

	}
	~TestClass()
	{
	
	}
};
std::shared_ptr<TestClass> child = std::make_shared<TestClass>();
  • std::shared_ptr 和普通指针的相互转化
	TestClass*  pTest = new TestClass;
	 std::shared_ptr<TestClass> ptr_test = std::shared_ptr<TestClass>(pTest); //普通指针转shared_ptr
	//此处 pTest 不用手动释放  因为 ptr_test 的引用计数为1
     std::shared_ptr<TestClass> ptr_test2 = std::make_shared<TestClass>();
 	 TestClass* pTest2 = ptr_test2.get(); //shared_ptr转普通指针

获取自身的std::shared_ptr 指针
继承自 std::enable_shared_from_this
调用 shared_from_this()

class FIniSection : public std::enable_shared_from_this<FIniSection>;
auto self  = shared_from_this();

STL中查找元素

  • 查找元素 std::find 函数
class TestObject
{
public:
	TestObject(){}
	~TestObject(){}
};
    std::vector<TestObject> vec;
    TestObject findObject;
	auto ret = std::find(vec.begin(), vec.end(),      findObject);// 
	if (ret != vec.end())
	{
		std::cout << "find " << std::endl;
	}
	else
	{
		std::cout << "not find " << std::endl;
	}

拷贝构造和赋值构造

class T;
T();//默认构造
T (T& t);						//拷贝构造函数
T (const T& t);					//拷贝构造函数
T& operator= (const T& t);		//赋值构造函数
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在mac系统下配置VSCode的C/C++环境需要进行以下步骤: 1. 首先确保你已经安装了VSCode编辑器。可以在VSCode官方网站上下载安装。 2. 打开VSCode,点击左侧的扩展图标,搜索并安装"C/C++"插件。这个插件提供了C/C++的语法高亮、智能提示等功能。 3. 安装好插件后,点击左下角的设置按钮,选择"首选项",再选择"设置"。在搜索框中输入"C/C++",找到"C/C++: Edit Configurations(JSON)"选项,点击"在settings.json中编辑"。 4. 在打开的settings.json文件中,添加C/C++的编译器路径。在mac系统下,可以使用Clang作为C/C++的编译器。你可以在终端输入"clang --version"查看是否已经安装了Clang。如果没有安装,可以通过Homebrew等方式进行安装。 5. 添加Clang的编译器路径。在settings.json文件中,添加以下代码: ```json "clang.cxxPath": "/usr/bin/clang++", "clang.cPath": "/usr/bin/clang" ``` 这里的"/usr/bin/clang++"是Clang的C++编译器路径,"/usr/bin/clang"是Clang的C编译器路径。请根据你自己的安装路径进行修改。 6. 保存settings.json文件,并重新启动VSCode。 7. 现在你就可以在VSCode中编写和调试C/C++代码了。创建一个新的文件,将其保存为以".c"或".cpp"为后缀的文件,然后开始编写代码。 总结:在mac系统下,配置VSCode的C/C++环境需要安装"C/C++"插件,添加Clang的编译器路径,并在VSCode中编写和调试C/C++代码。希望以上步骤对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路初心向前

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值