C++
文章平均质量分 52
Damon_X
这个作者很懒,什么都没留下…
展开
-
rvalue reference
template<class T>void swap(T& a, T& b)// "perfect swap" (almost){T tmp {static_cast<T&&>(a)}; // the initialization may write to aa = static_cast<T&&>(b);// the assignment may write to bb = static_cast<T.原创 2021-06-14 17:46:07 · 194 阅读 · 0 评论 -
Lvalues and Rvalues
To complement the notion of an lvalue, we have the notion of an rvalue. Roughly, rvalue means ‘‘avalue that is not an lvalue,’’ such as a temporary value (e.g., the value returned by a function).If you need to be more technical (say, because you want to原创 2021-06-14 17:22:08 · 152 阅读 · 0 评论 -
packaged_task & future & async
packaged_task:double accum(double∗ beg, double ∗ end, double init)// compute the sum of [beg:end) starting with the initial value init{return accumulate(beg,end,init);}double comp2(vector<double>& v){using Task_type = double(double∗,dou原创 2021-06-14 17:04:08 · 85 阅读 · 0 评论 -
Passing Arguments to thread function
void f(vector<double>& v);// function do something with vstruct F {// function object: do something with vvector<double>& v;F(vector<double>& vv) :v{vv} { }void operator()();// application operator ; §3.4.3};int main(原创 2021-06-14 17:00:42 · 173 阅读 · 0 评论 -
thread using
void f(); // functionstruct F {void operator()();}; // function object// F’s call operator (§3.4.3)void user(){thread t1 {f};thread t2 {F()};t1.join();t2.join();// f() executes in separate thread// F()() executes in separate thread// wait for原创 2021-06-14 16:58:17 · 178 阅读 · 0 评论 -
移动构造函数和移动赋值运算符
如果第二个对象是在复制或赋值结束后被销毁的临时对象,则调用移动构造函数和移动赋值运算符,这样的好处是避免深度复制,提高效率。为了直观地观察移动构造函数和移动赋值运算符的运行方式,编写一个类Pointer,该类的对象会在堆动态创建一个数组。代码如下:class Pointer{public: Pointer(const int i,const string &n) { mptr = new int[i]; length = i;...转载 2021-06-14 16:47:49 · 350 阅读 · 0 评论 -
引用返回左值及其判断引用有效性的方法
被调函数的返回类型决定返回的是左值还是右值,当被调函数的返回类型是引用时,返回的是左值,其余情况下返回的是右值,被调函数返回的左值有着与其他左值类型同样的运算特性,需要特别指出的是,我们能为返回类型是非常量引用的函数的结果赋值,但是需要注意的是,进行运算的前提是确保返回的引用是有效的,返回与局部对象绑定的引用是无效的,因为被调函数运行结束时,局部对象的存储空间已经释放,返回与局部对象绑定的引用将会产生错误的结果,要想确保返回值的安全,我们不妨自问:引用绑定的是被调函数运行前的哪一个对象?然而,在...转载 2021-06-14 11:21:47 · 370 阅读 · 0 评论 -
初始化列表的初始化顺序
构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个被定义的成员先被初始化,依次类推。一般,初始化的顺序无关紧要,然而,如果一个成员是根据其他成员而初始化,则成员的初始化顺序是至关重要的。class x { int i;//声明顺序是先i,后j,故初始化列表中,会先初始化i,在初始化j int j;public: x(inttem): j(tem),i(j){}//看起来是先初始化j,然后初始化i,其实恰恰相反,先用...原创 2021-06-14 10:55:40 · 1682 阅读 · 0 评论 -
how to get the size new‘ed
如果你用的是glibc的话,里面有个malloc_usable_size的函数,可以拿到malloc的大小。类似free,指针得是原始申请出来的指针,不能有偏移。#include "malloc.h"#include <iostream>void get_malloc_size(void* p) { size_t size = malloc_usable_size(p); std::cout << "malloc size is: " << size原创 2021-06-14 10:50:35 · 96 阅读 · 0 评论 -
thread examples in c++11, including how to pass member function to thread
// constructing threads#include <iostream> // std::cout#include <atomic> // std::atomic#include <thread> // std::thread#include <vector> // std::vectorstd::atomic<int> global_counter (0);.原创 2021-06-13 15:42:37 · 101 阅读 · 0 评论 -
list Initialization using {}
If an initializer is specified for an object, that initializer determines the initial value of an object.An initializer can use one of four syntactic styles:X a1 {v};X a2 = {v};X a3 = v;X a4(v);Of these, only the first can be used in every context, .原创 2021-06-13 15:41:07 · 124 阅读 · 0 评论 -
two ways to avoid deadlock when using mutex
// unique_lock constructor example#include <iostream> // std::cout#include <thread> // std::thread#include <mutex> // std::mutex, std::lock, std::unique_lock // std::adopt_lock, std::de.原创 2021-06-13 15:01:23 · 163 阅读 · 0 评论 -
为什么类中的线程函数必须要声明静态?
其实类的静态函数就跟全局函数是一个样子的, 只是调用的时候要加下个类修饰符而已.至于为什么不能是非静态成员函数呢, 因为非静态成员函数都会在参数列表中加上一个this指针为为参数, 这样的话你写的线程函数就不符合调用规定了.比如 DWORD WINAPI ThreadFun(LPVOID); 是非静态的,实际编译后,就会变成DWORD WINAPI ThreadFun(LPVOID, CMyClass *this);这个函数就明显不能作为线程的函数了, 因为多了个参数.所以编译就过不了了...转载 2021-04-30 10:06:35 · 622 阅读 · 0 评论 -
packaged_task
#include <iostream>#include <cmath>#include <thread>#include <future>#include <functional>// unique function to avoid disambiguating the std::pow overload setint f(int x, int y) { return std::pow(x,y); }void task_la..原创 2020-11-22 20:53:20 · 217 阅读 · 0 评论 -
code snippet
#include <mutex>#include <iostream>//std::recursive_mutex cout_mutex;std::mutex cout_mutex;// changed to recursive_mutex to avoid deadlocktemplate <typename Arg>void mywrite(Arg t){ std::cout << t << std::endl;}...原创 2020-11-22 20:43:07 · 118 阅读 · 0 评论 -
线程池的简单实现
网上摘来修改了一下:threadpool.h:#ifndefTHREADPOOL_H#defineTHREADPOOL_H#include<thread>#include<condition_variable>#include<mutex>#include<vector>#include<queue>#include<future>class...原创 2020-10-10 18:34:26 · 185 阅读 · 0 评论 -
Anonymous function in C++
C++ (since C++11)C++11 provides support for anonymous functions, calledlambda expressions. A lambda expression has the form:[capture](parameters) -> return_type { function_body }An exampl转载 2016-04-19 16:11:50 · 853 阅读 · 0 评论 -
C++初始化列表中无默认构造函数的成员的初始化
在初始化列表中,如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数。Android代码中的例子: 249 InputReader::InputReader(const sp& eventHub, 250 const sp& policy, 2原创 2016-06-07 17:48:21 · 2244 阅读 · 0 评论 -
C++ STL 学习 :for_each与仿函数(functor)(一)
C++ STL 学习 :for_each与仿函数(functor)(一)By zieckey( All right reserved!)先看wikipedia定义:A function object, also called a functor, functional, or functionoid,[1] is a computer programming cons转载 2016-06-14 15:39:01 · 447 阅读 · 0 评论 -
C++ STL 学习 :更多仿函数(functor)(二)
By zieckey( All right reserved!)C++ STL 学习 :更多仿函数(functor)(二)C++标准程序库中提供了许多非常有用的预先定义好的的仿函数,了解这些将为我们的开发工作带来便利性和稳健性。求反值:// TEMPLATE STRUCT negatetemplateclass _Ty> struc转载 2016-06-14 15:41:35 · 515 阅读 · 0 评论 -
调用操作符的重载与函数对象
一:调用操作符重载:我们可以为类类型的对象重载调用操作符即小括弧”()“,定义了调用操作符的类,在使用定义的调用操作符时,行为就像是调用函数,所以这种对象称为函数对象,即行为类似函数的对象:如下例子为类A定义了调用操作符,功能是返回一个绝对值:class A{ public: int operator() (int val) {转载 2016-06-14 15:57:46 · 495 阅读 · 0 评论 -
C++中的默认函数与default和delete用法
一、类中的默认函数 a.类中默认的成员函数 1.默认构造函数 2.默认析构函数 3.拷贝构造函数 4.拷贝赋值函数 5.移动构造函数 6.移动拷贝函数 b.类中自定义的操作符函数 1.operator 2.operator& 3.operator&& 4.operator* 5.operator转载 2017-06-21 10:26:33 · 849 阅读 · 0 评论 -
Bind illustrated
原文地址:http://blog.think-async.com/2010/04/bind-illustrated.htmlAsynchronous operations in Asio all expect a function object argument, the completion handler, which they invoke when the asynch转载 2016-05-25 21:19:16 · 360 阅读 · 0 评论