C++2.0(C++11) 笔记 二

简介: C++2.0(C++11) 笔记 二

Variadic Template

#include<iostream>
using namespace std;
void printX(){
}
template<typename T , typename... args>
void printX(const T& f1 , const args&... f2){
    cout << f1 << endl;
    printX(f2...);
}
int main(){
    printX(22 , "hello" , 23 , 24 , 25);
    return 0;
}
// 如果想知道传进来的这一包东西有几个,  可以使用sizeof...(args);

例二: 重写printf

void PrintX(const char* p){
    while(*p){
        if(*p == '%' && *(++p) != '%'){
        }
        cout << *p++;
    }
}
template<typename T , typename... Args>
void PrintX(const char* p , T type , Args... arg){
    while(*p){
        if(*p == '%' && *(++p) != '%'){
            cout << type << ' ' ;
            PrintX(++p , arg...);
            return;
        }
    }    
}
int main(){
    PrintX("%d%d%d" , 23 , 24 , 25);
    return 0;
}

第六种:   可以利用这种形式,到底要把哪几种类型组合成一包。这种做法非常的精简巧妙。   但是这么用会报错,直接写出它的类型即可。

 

可以用decltype类型推导

Rvalues references

右值是不可以出现在左边的,而什么是右值呢,最常见的就是临时对象。

这是一个不完美的转接。

如何设计一个具备移动语义意识的classs:

hashtable

hash function

Tuple

 

目录
相关文章
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
498 12
|
编译器 C语言 C++
C++一分钟之-C++11新特性:初始化列表
【6月更文挑战第21天】C++11的初始化列表增强语言表现力,简化对象构造,特别是在处理容器和数组时。它允许直接初始化成员变量,提升代码清晰度和性能。使用时要注意无默认构造函数可能导致编译错误,成员初始化顺序应与声明顺序一致,且在重载构造函数时避免歧义。利用编译器警告能帮助避免陷阱。初始化列表是高效编程的关键,但需谨慎使用。
392 2
|
编译器 C++
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
225 0
|
存储 机器学习/深度学习 编译器
【C++终极篇】C++11:编程新纪元的神秘力量揭秘
【C++终极篇】C++11:编程新纪元的神秘力量揭秘
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
284 1
|
C++ Windows
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
在Windows上使用Visual Studio 2022进行FFmpeg和SDL2集成开发,首先安装FFmpeg至E:\msys64\usr\local\ffmpeg,然后新建C++控制台项目。在项目属性中,添加FFmpeg和SDL2的头文件及库文件目录。接着配置链接器的附加依赖项,包括多个FFmpeg及SDL2的lib文件。在代码中引入FFmpeg的`av_log`函数输出"Hello World",编译并运行,若看到"Hello World",即表示集成成功。详细步骤可参考《FFmpeg开发实战:从零基础到短视频上线》。
1134 0
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
算法 安全 编译器
【C++航海王:追寻罗杰的编程之路】C++11(四)
【C++航海王:追寻罗杰的编程之路】C++11(四)
187 0
|
存储 安全 程序员
【C++航海王:追寻罗杰的编程之路】C++11(一)
【C++航海王:追寻罗杰的编程之路】C++11(一)
205 0
【C++航海王:追寻罗杰的编程之路】C++11(一)
|
存储 安全 程序员
【C/C++笔记】迭代器范围
【C/C++笔记】迭代器范围
295 0