initializer_list 列表初始化

摘要:
initializer_List初始化使用花括号初始化器列表初始化对象,其中相应的构造函数接受std::initializer_List参数#include<iostream>#include˂vector>#includetemplate<classT>structS{std::vector<T>v;S(std::初始化器列表<T
initializer_list 列表初始化

用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list 参数.

#include <iostream>
#include <vector>
#include <initializer_list>
 
template <class T>
struct S {
    std::vector<T> v;
    S(std::initializer_list<T> l) : v(l) {
         std::cout << "constructed with a " << l.size() << "-element list
";
    }
    void append(std::initializer_list<T> l) {
        v.insert(v.end(), l.begin(), l.end());
    }
    std::pair<const T*, std::size_t> c_arr() const {
        return {&v[0], v.size()};  // 在 return 语句中复制列表初始化
                                   // 这不使用 std::initializer_list
    }
};
 
template <typename T>
void templated_fn(T) {}
 
int main()
{
    S<int> s = {1, 2, 3, 4, 5}; // 复制初始化
    s.append({6, 7, 8});      // 函数调用中的列表初始化
 
    std::cout << "The vector size is now " << s.c_arr().second << " ints:
";
 
    for (auto n : s.v)
        std::cout << n << ' ';
    std::cout << '
';
 
    std::cout << "Range-for over brace-init-list: 
";
 
    for (int x : {-1, -2, -3}) // auto 的规则令此带范围 for 工作
        std::cout << x << ' ';
    std::cout << '
';
 
    auto al = {10, 11, 12};   // auto 的特殊规则
 
    std::cout << "The list bound to auto has size() = " << al.size() << '
';
 
//    templated_fn({1, 2, 3}); // 编译错误!“ {1, 2, 3} ”不是表达式,
                             // 它无类型,故 T 无法推导
    templated_fn<std::initializer_list<int>>({1, 2, 3}); // OK
    templated_fn<std::vector<int>>({1, 2, 3});           // 也 OK
}

initializer_list 列表初始化第1张

免责声明:文章转载自《initializer_list 列表初始化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Delphi FTP例子源码设计模式(一)单例模式:2-懒汉模式(Lazy)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

springboot工程启动即执行一段代码

最近在做一个项目, 需要Tomcat启动后就执行一段代码 在这里需要用到CommandLineRunner这个接口, Spring boot的CommandLineRunner接口主要用于实现在应用初始化后,去执行一段代码块逻辑,这段初始化代码在整个应用生命周期内只会执行一次, 下面是具体办法 创建一个ApplicationStartupRunner类继承...

Java的静态代码块是否会在类被加载时自动执行?

JAVA静态代码块会在类被加载时自动执行?一、先看Java静态方法,静态变量 http://www.cnblogs.com/winterfells/p/7906078.html 静态代码块 在类中,可以将某一块代码声明为静态的,这样的程序块叫静态初始化段。静态代码块的一般形式如下: static { 语句序列 } public class stat...

如来神掌第一式第十四招----HAPROXY详解

################################################################################ Name : Mahavairocana # Author : Mahavairocana # QQ : 10353512 # WeChat : shenlan-qianlan # Blog :...

转:Linux 编译安装 Mysql5.7

http://broqiang.com/2017/04/18/Mysql-Install-5.7.18-Linux-Compile/ 原文 Linux 编译安装 Mysql5.7 Ubuntu 下快速安装直接 apt 方式即可, 一般的开发环境也足够了 个人比较喜欢新版本,一般有新版本就会尝试一下 此文档适用于 Ubuntu 16.10 和 CentOS...

菜鸟学STM32之跑马灯

微信公众号:小樊Study关注共同学习,问题或建议,请公众号留言!!! 作为一名程序员,在初步学习编程想必都绕不开一个最为基础的入门级示例“Hello World”,那么,在学习单片机时,最基础的入门示例是什么呢?没错,那就是“点亮一盏LED灯”本次将通过一个经典的跑马灯程序,带大家开启 STM32F4 之旅,通过本次的学习,你将了解到 STM32F4 的...

青蛙学Linux—MySQL安装和初始化

1、安装MySQL 这里我们选择MySQL的源码包进行安装,MySQL版本5.7,安装路径为/usr/local/mysql,数据存储路径为/db/mysql,日志文件路径/usr/local/mysql/logs,运行MySQL的用户和组为mysql。 1.1、创建mysql用户 mysql用户用于运行MySQL,不能使用shell,为虚拟用户: [ro...