打开和关闭控制台
::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); //赋值构造函数
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。