首页 > 编程语言 >[C++ Primer] 变量和基本类型

[C++ Primer] 变量和基本类型

时间:2024-06-13 12:32:34浏览次数:17  
标签:默认值 const 变量 int C++ 类型 Primer 表达式

[C++ Primer] 变量和基本类型

变量

  1. 默认初始化

    如果定义变量时没有指定初值,则变量默认初始化,此时变量被赋予“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。

    内置类型:其默认值由定义的位置决定。定义于任何函数之外的变量被初始化为0。

    绝大多数类都支持无须显示初始化而定义对象,这样的类提供一个合适的默认值,比如string类若没指定初值则生成空串。

const 限定符

  1. 顶层const:可以表示任意的对象是常量,对任何数据类型都适用;
    底层const:与指针和引用等复合数据类型的基本类型部分有关。

    int i = 0;
    int *const p1 = &i;		// 不能改变p1,顶层const
    const int ci = 42;		// 不能改变ci,顶层const
    const int *p2 = &ci;	// 允许改变p2,底层const
    const int *const p3 = p2;//右边的const是顶层const,左边的是底层const
    const int &r = ci;		// 用于声明引用的const都是底层const
    
  2. 常量表达式:是指值不会改变并且在编译过程就能得到计算结果的表达式。

    const int max_files = 20;	// max_files是常量表达式
    int i = 7;					// i不是常量表达式,值会改变
    const int sz = get_size();	// sz不是常量表达式,运行时才能得到sz具体值
    

处理类型

  1. 类型别名的两种定义方法:

    • 关键字typedef

      typedef double wages;	// wages是double的同义词
      typedef wages base, *p;	// base是double的同义词,p是double*的同义词
      

      关键字typedef作为声明语句中的基本数据类型的一部分出现

    • 别名声明using

      using SI = Sales_item;
      
  2. auto类型说明符:让编译器替我们分析表达式所属的类型

    auto item = val1+val2;	// item初始化为val1和val2相加的结果
    
  3. decltype类型指示符:选择并返回操作数的数据类型,编译器分析表达式并得到它的类型,却不实际计算表达式的值

    decltype(f()) sum = x;	// sum的类型就是函数f的返回类型
    

    decltype((variable))(双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身就是一个引用时才是引用。

标签:默认值,const,变量,int,C++,类型,Primer,表达式
From: https://www.cnblogs.com/Invinc-Z/p/18245660

相关文章

  • jmeter【配置元件】-【用户定义的变量】与【前置处理器】-【用户参数】变量重复时,引用
    引用前置处理器中的【用户参数】原因:1.线程组下的用户参数优先级>测试计划中的用户定义的变量2.取样器(http请求)下的用户参数优先级>线程组下的用户参数优先级当某个取样器设置了用户参数时,会优先使用该取样器下的用户参数,因为配置元件一般在测试计划开始之前执行,前置处理器在......
  • 【C++面向对象】重载操作符
    C++将运算符重载扩展到自定义的数据类型,它可以让对象操作更美观。例如字符串string用加号(+)拼接、cout用两个左尖括号(<<)输出。运算符重载函数的语法:返回值operator运算符(参数列表);运算符重载函数的返回值类型要与运算符本身的含义一致。非成员函数版本的重载运算符函数:形......
  • 2024年华为OD机试真题-围棋的气-C++-OD统一考试(C卷D卷)
     2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19x19=361个交点,对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。“气”是围棋中很重要的一个概念,某个棋子有几口气,是指......
  • c++ 实现优先队列
    优先队列底层是堆,下面给出大根堆代码Push是在新节点到根节点的路径上寻找合适的插入位置;Pop是删除根节点之后维护大根堆,顺便为最后一个元素寻找合适的位置;1#include<bits/stdc++.h>23usingnamespacestd;45template<classT>6classp_queue{7pri......
  • c++在什么情况下会发生拷贝?
    在C++中,对象拷贝通常会在以下情况下发生:传递参数给函数:当你将对象作为参数传递给函数时,如果参数是按值传递的,那么会发生拷贝。例如:voidfunc(MyClassobj);//obj会被拷贝从函数返回对象:当函数返回一个对象时,如果函数返回的是对象本身而不是引用或指针,会发生拷贝。例......
  • C++中的流
    目录字节流(ByteStreams)字符流(CharacterStreams)主要区别在C++中,字节流和字符流是两种处理输入输出(I/O)的操作方式,它们都属于iostream库的一部分。它们的主要区别在于处理数据的基本单元和适用场景。字节流(ByteStreams)字节流以字节(byte)为基本处理单位,每个字节包含......
  • C/C++ 使用宏时应注意的问题总结
    使用C/C++宏时,为了确保代码的正确性、可读性和可维护性,现总结一些注意事项和最佳实践:1.定义常量使用#define定义常量时,要注意其类型不安全性。虽然它使用方便快捷,但缺乏类型检查可能导致问题。如果需要类型安全的常量,可以考虑使用const或constexpr。2.多重包含防范当宏......
  • 红黑树/红黑树迭代器封装(C++)
        本篇将会较为全面的讲解有关红黑树的特点,插入操作,然后使用代码模拟实现红黑树,同时还会封装出红黑树的迭代器。    在STL库中的set和map都是使用红黑树封装的,在前文中我们讲解了AVL树,对于红黑树和AVL树来说,这两种树都是效率很高的搜索二叉树,但是......
  • AVL树 ---(C++)
        本篇讲全面的讲解AVL树的插入,旋转以及验证AVL树的性能(本篇未实现删除代码)。至于为什么会有AVL树,这是因为简单的二叉搜索树并不能直接的保证搜索的效率,因为当我们在二叉搜索树中插入一段有序的序列的时候,二叉搜索树就会退化为单枝树,这个时候进行搜索的时候,时......
  • c++ 游戏:俄罗斯方块
    ​​​​​​​#include<iostream>#include<string>#include<cstdlib>#include<windows.h>#include<ctime>#include<conio.h>#include<cstdio>usingnamespacestd;classTetris{private:intrank;//游戏难度等级intscore;//得分intid;/......