首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++11】统一的 {} 列表初始化

Ⅰ. {} 列表初始化 ​ 在 C++98 中,标准允许使用花括号 {} 对数组或者结构体元素进行统一的列表初始值设定。...a = 10; double b{ a }; // ❌因为从int到double需要收缩转换 double c = 10.0; int d{ c }; // ❌因为从double...>(x); // 显式进行类型转换,并进行范围检查,比上面的做法安全的多 unsigned char e{ -1 }; // ❌收缩,无法通过编译,从int转换到unsigned char...double到float截断 return 0; } ​ 在 C++ 中,将一个 const int 类型的值赋给 char 类型的变量时,编译器会发生一种叫做 整数类型收缩 的隐式类型转换,而不是发生强制类型转换...它可以将你放入 {} 中的元素按照你要的类型 T 生成一个 initializer_list 对象,接着还有重要的一步,就是如 vector、list 等容器中,C++11 已经添加了新的构造函数参数:

8200

C语言与C++面试知识总结

volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值) const 可以是 volatile (如只读的状态寄存器...doA(1); // OK:允许从 int 到 A 的隐式转换 if (a1); // OK:使用转换函数 A::operator bool() 的从 A 到 bool 的隐式转换 bool...bool() 的从 A 到 bool 的隐式转换 bool a8 = static_cast(a1); // OK :static_cast 进行直接初始化 B b1(1); //...修饰构造函数的对象不可以从 int 到 B 的隐式转换 if (b1); // OK:被 explicit 修饰转换函数 B::operator bool() 的对象可以从 B 到 bool 的按语境转换...允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换

5K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么?CC++面试过不了?因为你还没看过这个!

    volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值) const 可以是 volatile (如只读的状态寄存器...doA(1); // OK:允许从 int 到 A 的隐式转换 if (a1); // OK:使用转换函数 A::operator bool() 的从 A 到 bool 的隐式转换 bool...bool() 的从 A 到 bool 的隐式转换 bool a8 = static_cast(a1); // OK :static_cast 进行直接初始化 B b1(1); //...修饰构造函数的对象不可以从 int 到 B 的隐式转换 if (b1); // OK:被 explicit 修饰转换函数 B::operator bool() 的对象可以从 B 到 bool 的按语境转换...允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换

    3.7K50

    C++相关基础知识总结笔记

    函数参数中的 char* 和 char[] 的区别 当作为函数参数时,char* 和 char[] 都会被退化为指向第一个元素的指针类型。因此,它们在形式上看起来是相同的。...但是,从语义上来讲,它们表示的是不同的东西: char* param 表明参数是一个指向字符的指针。 char param[] 虽然编译器处理成 char* param,但它暗示参数是一个字符数组。...volatile关键字的作用 volatile 关键字主要用于多线程环境中,用于标记一个变量,使得对该变量的读写操作不会被编译器或处理器优化而存储在寄存器中,而是每次都强制从主内存中加载最新的值。...因此,引用成员变量必须在构造函数的初始化列表中初始化。...这些成员变量在初始化列表中通过传递构造函数的参数来初始化,而不是通过赋值。

    21330

    整理了70道C语言与C++常见问答题

    可以,必须通过成员函数初始化列表初始化。...,如:shared_ptr p = pa->pb_.lock(); p->print(); 39 说说强制类型转换运算符 「static_cast」 用于非多态类型的转换 不执行运行时类型检查(转换安全性不如...、向下转换 「const_cast」 用于删除 const、volatile 和 __unaligned 特性(如将 const int 类型转换为 int 类型 ) reinterpret_cast...允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换...参数的区别:被重写函数和重写函数的参数列表一定相同,而被重载函数和重载函数的参数列表一 定不同。

    3.1K01

    C++ const各种用法总结

    ; [2]只能通过初始化成员列表来初始化; [3]试图在构造函数体内对const成员变量进行初始化会引起编译错误。...int m_data; }; (3)强制转换:const_cast class A { public: A::A(int i):m_data(i){} void SetValue(int i) {...,而不是一般的对象实例,原因同上; 4.const在成员函数中的三种用法(参数、返回值、函数)要很好的使用; 5.不要轻易的将函数的返回值类型定为const; 6.除了重载操作符外一般不要将返回值类型定为对某个对象的...如(1)中,如果想修改Max的内容,只需要: const int Max=you want; 即可! 4.可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。...const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝

    2K10

    与C++类和对象的宿命(下)

    2.const成员变量,只能在初始化列表里面进行初始化操作 3.引用成员变量 • 每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。...示例: int a = 42; char* p = reinterpret_castchar*>(&a); // 将 int* 转换为 char* 3....总结 C++ 提供了多种类型转换方式,从隐式到显式,灵活地应对不同的需求。理解并合理使用这些转换方式,不仅能够提升代码的安全性和可读性,还能避免不必要的错误。...以下是几个常见的场景: 方法参数:在传递对象作为方法参数时,直接创建匿名对象而不需要事先定义它。...当对象被移动时,编译器会通过“偷取”资源的方式来避免深拷贝。 移动构造函数和移动赋值运算符允许编译器从源对象中“移动”资源,而不是复制它们。

    20410

    JAVA 第二天 基本数据类型

    而char用16位表示,它是无符号的,表示的是UTF-16编码集。 byte由1个字节8位表示,是最小的整数类型。主要用于节省内存空间关键。...Char 16 bits, [0, 65535], [0, 2^16 -1],从'\u0000'到'\uffff'。无符号,默认值为'\u0000'。...当char进行加减乘除运算的时候,也被转换成int类型,必须显式转化回来。...boolean与是否为0没有任何关系,但是可以根据想要的逻辑进行转换。 自动转换 较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。...强制类型转换 如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。

    64990

    真没想到nullptr和NULL得区别,大了去了

    //情况3:模板函数中 nullptr更具优势 //适当的信息量被锁定才调用,每个函数的形参都是不同型别的指针 class Widget{ }; int f1(std::shared_ptr中的枚举型别可以进行前置声明,而C++98中就不行呢?...,现在称为不限范围的枚举型别 • 限定作用域的枚举型别仅在枚举型别内可见 它们只能通过强制型别转换以转换至其他型别。...//basic_ios型别对象而无法工作, 而 private只有在链接阶段才能诊断出来 //C++98中:private阻止客户去调用它们,故意不去定义它们 //意味着一段代码仍然可以访问它们,如成员函数...,但只有成员函数能声明为 private //可以凑合看作是数值得型别,都可以隐式转型到 int ,因此阻止调用通过编译得方法 //为我们想要过滤得型别创建删除重载版本 bool isLucky(int

    1.8K30

    【笔记】《C++Primer》—— 第一部分:C++基础

    自动推断类型的关键字auto会顺便进行变量的赋值且会忽视顶层const,所以auto必须要初始化 *和&是属于标识符而不是数据类型,会被auto忽视 只想推导数据类型而不需要赋值,可以使用decltype...)的效率要比+稍好一些 不用执意用char*来代替string,它们的效率差距远没有那么大 C11增加的range-for,括号中冒号前的是从后面的序列中得到的一个对象,会自动对支持的对象进行遍历 string...static_cast是最常用最基础的转换,我们平时使用的强制类型转换都可以改成这个。...类成员初始化的顺序是成员在类内声明的顺序而非参数列表的顺序。...*一步*隐式转换 这种隐式类型转换有时候我们是不希望其启用的,此时我们可以将那个那个构造函数声明为explicit(显式的),它就不会进行隐式转换 explicit只要在类内的声明中写,类外定义时不需要写

    1.5K40

    『C++』我想学C++,C++太难了,那我想入门,给我10分钟我带你入门

    强制类型转换 强制类型转换是通过定义类型转换运算来实现的。...其一般形式为: (数据类型) (表达式) 其作用是把表达式的运算结果强制转换成类型说明符所表示的类型 在使用强制转换时应注意以下问题: 数据类型和表达式都必须加括号, 如把(int)(x/2+y)写成...转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。 强制转换后的运算结果不遵循四舍五入原则。...sizeof(int)*k) 从a中赋值k个元素到b数组。...1.函数的参数 1)形参和实参 形参:在定义函数的时候,函数名后面小括号中的参数 , 格式: 数据类型 变量 如:int x; 形参的作用域:只能在本函数中使用 实参:调用函数的时候传递的参数

    1.6K10

    第十四届蓝桥杯集训——JavaC组第三篇——常量与变量(八种基本数据类型)

    变量 八种基本数据类型 变量定义 引用类型String Java中简基本数据类型的转型 Java中的简单数据类型的转换分为两种:自动转换和强制转换  1)自动转换: 2)强制转换: 3)转换附加: Java...常量可区分为不同的类型,如:25、0为整型常量,6.8为实型常量,‘a’、‘b’为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。...在方法调用过程,如果实际参数较“小”,而函数的形参比较“大”的时候,除非有匹配的方法,否则会直接使用较“大”的形参函数进行调用。...2)强制转换:   将“大”数据转换为“小”数据时,可以使用强制类型转换,在强制类型转换的时候必须使用下边这种语句: int a = (int)3.14;   只是在上边这种类型转换的时候,有可能会出现精度损失...而拓展范围就遵循上边的自动类型转换树,当这两个条件都满足的时候,拓展转换才会发生,而对于几个原始类型转换过程,根据兼容性boolean和char应该是独立的,而其他六种类型是可以兼容的,在强制转换过程,

    35330

    C语言入门

    char ch = 'A'; putchar(ch+32); 3、强制类型转换运算符 C语言中可以运用强制类型转换运算符将一个表达式转换成所需的类型。...强制类型转换的一般格式为:(类型名)(表达式) 例如: (double)a //将变量a强制类型转换为double类型 (int)(x+y) //将表达式(x+y)的结果强制类型转换为int类型 (float...char c[10]; }d1={1},d2,d3; //可以对共用体变量进行初始化,但是初始化列表中只能有一个常量。...定义函数指针的一般格式:*数据类型 (函数指针名)(函数参数列表); 如: int (*funp)(int,char); //定义了一个指针函数,用于指向返回值类型为int型、函数参数为(int,char...链表是数据结构中线性表的一种,其中的每个元素实际上是一个单独的结构体对象,而所有对象都通过 每个元素中的指针链接在一起。

    86330

    Java入门基础知识点总结(详细篇)

    使用时要加上强制转换符,例如(int),但可能造成精度降低或溢出,格外要注意。 ②通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。...如: String a = “43”; int i = Integer.parseInt(a); boolean类型不可以转换为其它的基本数据类型。...char、byte、short之间不相互转换,涉及到运算转换成int,转成int不会自动转回来。...int 型 再赋值给 short 类型的 s1 时将发生强制类型转换的错误 虽然 x+=y 和 x=x+y 两个表达式在一般情况下可以通用,但是在 Java 环境中运行时存在一些细微的差别。...Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

    2.7K10

    串口调试工具--UartAssit

    表达式中的calculate是系统内置函数,用于计算校验算法,calculate函数的第1个参数表示从当前发送数据的第几个字节开始计算校验码;第2个参数表示校验数据长度,此长度可以负数,比如为-1时,表示数据长度截止到当前...(1) 显式强制类型转换 显式强制类型转换很简单,格式为: TYPE b = (TYPE) a; 其中,TYPE为类型描述符,如int,float等。...经强制类型转换运算符运算后,返回一个具有TYPE类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如: int n=0xab65; char a=(char)n; 上述强制类型转换的结果是将整型值...在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回,如: int n; double d=3.88; n...、字符串或数据指针类型;可选参数maxLen用于指定数据转换的最大长度,如果省略该参数则转换长度取源数据data的默认长度值,如int类型数据默认长度4字节,short类型默认2字节,字符串则自动获取字符串自身长度

    6.5K10

    类继承

    ; //ok 将派⽣类引⽤或指针转换为基类引⽤或指针被称为向上强制转换(upcasting),这使公有继承不需要进⾏显式类型转换。...将基类指针或引⽤转换为派⽣类指针或引⽤——称为向下强制转换(downcasting)。 如果不使⽤显式类型转换,则向下强制转换是不允许的。原因是is-a关系通常是不可逆的。...如果类不会⽤作基类,则不需要动态联编。 如果派⽣类(如RatedPlayer)不重新定义基类的任何⽅法,也不需要使⽤动态联编。 C++的指导原则之⼀是,不要为不使⽤的特性付出代价(内存或者处理时间)。...使⽤虚函数时,在内存和执⾏速度⽅⾯有⼀定的成本,包括: 每个对象都将增⼤,增⼤量为存储地址的空间; 对于每个类,编译器都创建⼀个虚函数地址表(数组); 对于每个函数调⽤,都需要执⾏⼀项额外的操作,即到表中查找地址...从Ellipse和Circle类中抽象出它们的共性,将这些特性放到⼀个ABC中。 然后从该ABC派⽣出Circle和Ellipse类。添加所需的成员来完成每个类。

    1.3K30

    《逆袭进大厂》之C++篇49问49答

    13、哪几种情况必须用到初始化成员列表? 初始化一个const成员。 初始化一个reference成员。 调用一个基类的构造函数,而该函数有一组参数。...定义时要分配空间,不能在类声明中初始化,必须在类定义体外部初始化,初始化时不需要标示为static;可以被非static成员函数任意访问。...,重载是不同函数之间的水平关系 重写要求参数列表相同,重载则要求参数列表不同,返回值不要求 重写关系中,调用方法根据对象类型决定,重载根据调用时实参表与形参表的对应关系来选择函数体 (3)隐藏(hide...)函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接嵌入到目标代码中。...(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会拋出此异常 bad_alloc:在用 new 运算符进行动态内存分配时,如果没有足够的内存,则会引发此异常 out_of_range:用

    2K10

    《逆袭进大厂》之C++篇49问49答(绝对的干货)

    13、哪几种情况必须用到初始化成员列表? 初始化一个const成员。 初始化一个reference成员。 调用一个基类的构造函数,而该函数有一组参数。...定义时要分配空间,不能在类声明中初始化,必须在类定义体外部初始化,初始化时不需要标示为static;可以被非static成员函数任意访问。...,重载是不同函数之间的水平关系 重写要求参数列表相同,重载则要求参数列表不同,返回值不要求 重写关系中,调用方法根据对象类型决定,重载根据调用时实参表与形参表的对应关系来选择函数体 (3)隐藏(hide...)函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接嵌入到目标代码中。...(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会拋出此异常 bad_alloc:在用 new 运算符进行动态内存分配时,如果没有足够的内存,则会引发此异常 out_of_range:用

    2.6K40

    移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——5.string(模拟实现)

    ; 下方 因为构造函数需要调用iostream中的函数(strlen),而展开iostream需要使用using namespace std,而寻找默认从展开处往上找。...2.1构造函数 1.初始化列表 string(const char* str="")// 传的是常量字符串 需要用const :_size(strlen(str)) , _capacity(_size...如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给 出。一般情况都是按照深拷贝方式提供。...4 : _capacity * 2); } int end = _size; while (end >= (int)pos) //需要强制类型转换成int,否则会因为类型提升倒置死循环...len : _capacity+len); } int end = _size; while (end >= (int)pos) //需要强制类型转换成int,否则会因为类型提升倒置死循环

    6310
    领券