前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >C/C++总结

C/C++总结

作者头像
用户7886150
修改2021-02-20 14:53:30
修改2021-02-20 14:53:30
7760
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: C++ wcsrchr()

打开和关闭控制台 

    ::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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档