C++深究

函数指针

double pam(int, double); // prototype
double (*pf)(int, double); // declare function pointer
pf = pam; // pf now points to the pam() function
double y = (*pf)(1, 5); // call pam() using pointer pf

内联函数

适用范围:不是递归调用的函数;函数多次被调用;

inline double square(double x) {
return x * x;
}

函数模板

// non template function prototype
void Swap(job &a, job &b);
// template prototype
temple<class T>
void Swap(T &a, T &b);
// explicit specialization for the job type
template<> void Swap<job>(job &a, job &b);

关键字decltype

int x;	double y;
decltype(x + y) xpy; // make xpy the same type as x + y

关键字explicit

作用:防止隐式转换

class A {
private:
string s;
public:
A(string _s = "") : s(_s) {}
int compare(const A& other);
}; class B {
private:
string s;
public:
explicit B(string _s = "") : s(_s) {}
int compare(const B& other);
}; int main() {
A a;
a.compare("Valid"); // Is valid to do that
B b;
b.compare("InValid"); // Is invalid to do that
return 0;
}

关键字auto

作用:自动推导变量类型

vector<int> v;
auto it = v.begin();

运算符dynamic_cast

作用:判断指针pg的类型是否被安全地转换为Superb*。如果可以,运算符将返回对象的地址,否则返回一个空指针。

class Superb : public Grand {...}
Grand *pg = new Grand;
Superb *pm = dynamic_cast<Superb*>(pg);

运算符typeid

作用:确定两个对象是否为同种类型

typeid(Grand) == typeid(*pg);

运算符const_cast

作用:删除const typename* 中的const,当且仅当指向的值的声明是非const的时候有效

void change(const int *pt, int n) {
int *pc = const_cast<int*>(pt);
*pc += n;
}
int pop1 = 38383;
change(&pop1, -103); // valid
const int pop2 = 2000;
change(&pop2, -103); // invalid

运算符static_cast

作用:可隐式转换的时候才生效

High bar;
Low blow;
High *pb = static_cast<High*>(&blow); // valid
Low *pl = static_cast<Low*>(&bar); // valid
Pond *pmer = static_cast<Pond*>(&blow); // invalid

运算符reinterpret_cast

作用:天生危险的类型转换

struct dat {short a, b};
long value = 0xaaaaaaaa;
dat *pd = reinterpret_cast<dat*>(&value); // valid

智能指针auto_ptr

作用:离开作用域的时候自动调用析构函数释放动态内存

void function() {
auto_ptr<double> ap(new double);
*ap = 2.333;
return;
}

智能指针shared_ptr

作用:跟踪引用特定对象的智能指针数,当最后一个指针过期时,才调用delete

智能指针unique_ptr

作用:唯一所有权(ownship),不允许智能指针直接拷贝赋值

Lambda函数

作用:允许使用匿名函数

说明:&表示引用变量,=表示取值变量

[](int x) {return x % 3 == 0;}
bool f(int x) {return x % 3 == 0;}
[&count, =sock]() {count++;}

包装器function

作用:用作形式参数,作为一个function包装器对象

template<class T>
T use_f(T v, std::function<T(T)> f); function<double(int, char)> f;
// 等价于
double f(int, char);

可变参数模板

作用:传递未知数量的参数

void print() {}

template<class T>
void print(T value) {
std::cout << value << std::endl;
} template<class T, class... Args>
void print(T value, Args... args) {
std::cout << value << ", ";
print(args...);
}

C++的技术探究的更多相关文章

  1. (转)Java动态追踪技术探究

    背景:美团的技术沙龙分享的文章都还是很不错的,通俗易懂,开阔视野,后面又机会要好好实践一番. Java动态追踪技术探究 楔子 jsp的修改 重新加载不需要重启servlet.如何在不重启jvm的情况下 ...

  2. 网站相关技术探究keepalive_timeout(转)

    网站相关技术探究keepalive设多少: /proc/$PID/fd/$number  0:标准输入 1:标准输出 2:标准错误   Test: [root@KTQT ~]# ll /proc/12 ...

  3. Java动态追踪技术探究(动态修改)

    Java动态追踪技术探究 Java探针-Java Agent技术-阿里面试题 秒懂Java动态编程(Javassist研究) 可以用于在类加载的时候,修改字节码. Java agent(Java探针) ...

  4. commons-pool2 池化技术探究

    一.前言 我们经常会接触各种池化的技术或者概念,包括对象池.连接池.线程池等,池化技术最大的好处就是实现对象的重复利用,尤其是创建和使用大对象或者宝贵资源(HTTP连接对象,MySQL连接对象)等方面 ...

  5. Android中直播视频技术探究之---桌面屏幕视频数据源采集功能分析

    一.前言 之前介绍了Android直播视频中一种视频源数据采集:摄像头Camera视频数据采集分析 中介绍了利用Camera的回调机制,获取摄像头的每一帧数据,然后进行二次处理进行推流.现在我们在介绍 ...

  6. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  7. Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

    一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,A ...

  8. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  9. Android中直播视频技术探究之---基础知识大纲介绍

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  10. Java动态追踪技术探究

    引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧.” “线上机器,没开Debug端口.” “看日 ...

随机推荐

  1. Spring Cloud学习笔记--Spring Boot初次搭建

    1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...

  2. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )(转载)

    想想面试的时候很多会问jvm这方面的问题虽然还是菜鸟不太能用到现在但是还是了解一下, 找资料的时候看见个大佬写的很好转载到这方便以后自己复习和给大佬做宣传 以下为大佬的博客原文: 这两天看了一下深入浅 ...

  3. 无框架JavaWeb简单增删改查,纯 jsp小练习

    地址 : 纯本人手码 jsp练习>>>>>

  4. nginx配置https转发到tomcat(使用自签名的证书)

    一.使用openSSL生成自签名的证书 1.生成RSA私钥 命令:openssl genrsa -des3 -out server.key 1024 说明:生成rsa私钥,des3算法,1024强度, ...

  5. 设计模式之建造者模式(Buider)(5)

    简介 在软件开发中,也会存在一些构造非常复杂的对象,这些对象拥有一系列的成员属性,这些成员属性有些是基本数据类型,有些是引用类型,总之就是一句话,这个对象的构建比较复杂.在这里我们就将复杂对象当做汽车 ...

  6. 【代码笔记】iOS-UIActionSheet动态添加按钮

    一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  7. OSGI企业应用开发(二)Eclipse中搭建Felix运行环境

    上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...

  8. 帆软发布大数据直连引擎FineDirect,对焦大数据BI

    摘要:近日,帆软官方正式发布大数据直连引擎FineDirect模块.通过该模块,企业在应用FineBI原有功能的基础上,可直接对接现有数据源,无论是传统的关系型数据库,还是Hadoop生态圈.Mpp构 ...

  9. Mariadb MySQL、Mariadb中GROUP_CONCAT函数使用介绍

    MySQL.Mariadb中GROUP_CONCAT 函数使用介绍 By:授客 QQ:1033553122 语法: GROUP_CONCAT([DISTINCT] column_name [ORDER ...

  10. 存折打印机测量和毫米方式Form配置说明

    一.打印一把尺子(单位:mm) 存折打印机测试程序:D:\Inspur\InspXfs\Bin\InspPassbook\NuDevPassbookTest.exe .) 二.测量存折(横向和纵向) ...