C++11
幻想之渔
永远相信美好的事情即将发生!
展开
-
C++ 之 auto推导遇到多态
#include <iostream>using namespace std;class Base {public: virtual void fun() { std::cout << "Base::fun()" << std::endl; }};class Derived : public Base {public: virtual void fun() { std::cout <<原创 2021-10-23 19:10:32 · 367 阅读 · 0 评论 -
C++ 之 std::numeric_limits 类模板
C++ 可以通过 std::numeric_limits 类模板来获取类型的最大值和最小值等,如:#include <iostream>#include <limits> // std::numeric_limitsusing namespace std;int main(int argc, char *argv[]) { std::cout << "long long max" << std::numeric_limits<long原创 2021-10-23 18:38:13 · 637 阅读 · 0 评论 -
C++ 打印日志的宏
利用C++宏,可以很简单的编写出一个打印日志的语句代码// 文件名 log.hclass MyLog { public: ~MyLog() { ::std::cout << ::std::endl; } std::ostream& operator << (const char* s){ std::cout << ...原创 2019-09-16 14:04:07 · 954 阅读 · 0 评论 -
函数对象
函数对象(Lambdas)C++11允许定义内部函数,可以当做参数或者对象使用。格式和参数[capture](parameters) mutable throwSpec ->retType {statement}例如:[](int a, int b) -> int { return a + b; }[capture]:捕捉列表捕捉列表总是出现的lambda表达式的开始...原创 2019-09-15 16:11:30 · 149 阅读 · 0 评论 -
数量不定的模板参数(Variadic Templates)
使用数量不定的模板参数(Variadic Templates)实现递归输出:#include <iostream>void print() { // 0个参数时候调用}template <typename T, typename... Types>void print(const T& firstArg, const Types&... args...原创 2019-05-05 23:51:56 · 738 阅读 · 0 评论 -
struct/class对象初始化(C++11)
C++11提供了新的初始化struct和class属性的方法,但是仅能初始化公有成员变量。代码如下:#include <iostream>#include <map>using namespace std;class Test { public: // private和protected 下面的初始化方式不可用 uint32_t a; uint64_t...原创 2018-12-26 19:43:27 · 3082 阅读 · 0 评论 -
C++智能指针
1. 智能指针的作用C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成:堆内存泄露(忘记释放)二次释放程序发生异常时内存泄露2. 理解智能指针从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取...原创 2018-11-28 10:11:21 · 180 阅读 · 0 评论 -
线程变量 pthread_key_t
线程存储:Thread Specific Data线程存储作用大家都知道,在多线程程序中,所有线程共享进程中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。线程存储是实现同一个线程中不同函数间共享数据的一种很好...原创 2018-11-27 14:02:55 · 1750 阅读 · 0 评论 -
std::string::npos的使用
std::string::nposstd::string::npos是一个常熟,它等于size_type类型可以表示的最大值,用来表示一个不存在的位置,类型一般是std::container_type::size_type。定义static const size_type npos = -1;#include <iostream>int main(int a...原创 2018-08-06 15:56:54 · 37176 阅读 · 3 评论 -
std::ref和std::cref使用
std::ref和std::cref解释std::ref 用于包装按引用传递的值。 std::cref 用于包装按const引用传递的值。为什么需要std::ref和std::crefbind()是一个函数模板,它的原理是根据已有的模板,生成一个函数,但是由于bind()不知道生成的函数执行的时候,传递进来的参数是否还有效。所以它选择参数值传递而不是引用传递。如果想引用传...原创 2018-08-09 20:42:44 · 30307 阅读 · 5 评论 -
linux C++程序使用jsoncpp,并编译程序
#include #include int main() { Json::Value json; json["type"] = 1; json["txt"] = "nihao"; std::cout << json["txt"] << std::endl; std::cout << "end" << std::endl; return 0;}将上面的程序保存为jsonTes原创 2017-10-30 17:47:56 · 709 阅读 · 0 评论 -
C++ 返回的内容自动释放
项目中经常会遇到这个的问题:从连接池中获取的连接,忘记放进连接池了;加锁后,忘记解锁了。。。这个是时候,你可能会想,有谁能帮我,在我获取的资源不用的时候,给删除掉,免得我自己来亲力亲为。有的,C++11已经提供了对锁的自动释放,很简单:#includestd::mutex mutex_;std::unique_lock lock(mutex_);在lock出作用域的时候原创 2017-11-03 15:48:06 · 1175 阅读 · 0 评论 -
C++11 tread和锁
#include #include #include int i = 0;std::mutex locks;void fun1(){ locks.lock(); std::cout <<"fun1_"<< i++ <<std::endl<<std::unitbuf; locks.unlock();}void fun2(){ //std::mutex locks; //没有原创 2017-08-28 15:03:12 · 314 阅读 · 0 评论 -
C++11的强类型枚举
C++之前的枚举的成员名字是全局可见的,下面的情况就会报错enum Book1{red = 1, blue = 2, green = 3, black = 4};enum Book2{red = 1, yellow = 2};Book1和Book2都含有red,就会出现冲突,C++11枚举解决了这个问题:enum class Book1{red = 1, blue = 2, green = 3,原创 2017-10-30 19:47:46 · 440 阅读 · 0 评论 -
boost和c++11创建线程的区别
C++11引入线程库,给广大的C++苦逼程序员带来了福音,之前项目中使用的是boost库,为了响应C++11的热情号召,决定最近的项目中就开始使用C++11线程库!于是我很愉快的写出下面的代码:#include #include #include void haha(int& i) { std::cout << i << std::endl;}int main(int a原创 2017-10-30 15:21:25 · 2696 阅读 · 0 评论 -
c++ string和其他类型互转
c++中string和其他基本数据类型的转化总是需要自己实现,但是c++11给广大的c++程序员带来了福音,c++基础类型的相互转化变得非常简单。其他类型 -> stringstd::string to_string( int value );std::string to_string( long value );std::string to_string( long long val原创 2017-10-18 15:41:01 · 1152 阅读 · 0 评论 -
C++11 自动释放锁
c++11加入了很多新的特性,值得我们去探索。先看一个例子:普通的、不能自动的释放自己的锁#include /*std::cout*/#include /*std::thread*/#include /*std::bind*/#include /*usleep*/#include /*std::mutex、 std::lock_guard*/clas原创 2017-08-30 11:42:47 · 4317 阅读 · 0 评论