首页
学习
活动
专区
圈层
工具
发布

c++基础之变量和基本类型

一个坏的规范是,想用了,就在cpp文件中使用extern声明,这样会导致声明有多份,修改定义,其他声明都得改,项目大了,想要找起来就不那么容易了。...这里介绍指针和引用这两种 引用类型 引用是对象的一个别名,从汇编的角度来看引用就是指针,但是使用引用比指针安全,也容易理解 使用引用类型时需要注意以下几点: 引用必须指向对象 引用必须初始化 引用一旦初始化后...k = 0; //错误,引用必须与变量绑定 指针类型 指针是一个特殊的类型,它本身是一个对象,对象中存储的值是另一个对象的地址。...,而且后续可以随意更改指向(当然必须指向同一数据类型) 可以多个指针指向同一个对象 指针只能指向对象,指针本身也是一个对象。...在多文件中,为了完成这一个操作,必须事先知道它的值,也就是在编译阶段知道它的值。

1.9K30

《C++Primer》第二章 变量和基本类型

指针 指针只可能是以下四种情况: 指向一个对象 指向紧邻对象所占空间的下一个位置 空指针 无效指针 试图拷贝或者以其他方式访问无效指针的值都会引发错误,编译器并不会负责检查此类错误。...指针和const 指向常量的指针不能用于修改其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针。...顶层const表示指针本身是一个常量,底层const表示指针所指的对象是不是一个常量。 当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格。...C++11新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,且必须用常量表达式初始化。 处理类型 1....头文件通常包含哪些只能被定义一次的实体,如类、const和constexpr变量等 C++会使用头文件保护符来防止包含多份相同的头文件。

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

    数组与指针

    数组的维数必须用值大于等于1的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型const对象。...二、指针    指针是指向某种类型对象的符合数据类型,是用于数组的迭代器:指向数组中的一个元素。       1、指针是什么:指针就是用于指向对象,指针提供对其所指对象的间接访问。...如果可能的话,除非所指向的对象已经存在,否则不要先定义指针,这样可避免定义一个未初始化的指针。       如果必须分开定义指针和气所指向的对象,则将指针初始化为0....4、对指针进行初始化或者赋值只能使用以下四种类型的值: 0值常量表达式 类型匹配的对象的地址 另一个对象之后的下一个地址 同类型的另一个有效指针         5.具有void* 类型的指针可以保存任意类型对象的地址...6、指针和引用的比较               引用总是指向某个对象,定义引用时没有初始化是错误的;赋值行为的差别,给引用赋值修改的是该引用所管理的对象的值,而并不是使引用与另一个对象关联。

    1.4K80

    C++primer学习笔记(一)

    假设p是指针,当delete p;时,后面一定要p=NULL将p指向空 cin cout cerr 都是iostream类型的对象。....*/ */ 是错误的 表示整数、字符和布尔值的算术类型合称为整形。区分类型是因为只有知道某地址值的类型,才能知道需要多少位表示这个变量和如何解释这些位。...引用初始化后始终绑定到初始化的对象,不能改变【引用本身不占存储单元】。const对象必须由const引用指向【避免一个能修改,一个不能修改,既对象本身和代表其的引用必须同时为const】。...typedef用来定义类型的同义词。 头文件用于声明,不是定义,因而可以出现多次。定义的语句不应该放在头文件里,出现两次会导致多重定义链接错误。...C++强制要求指向const对象的指针也必须具有const特性,可以把非const对象地址赋给const指针。

    68520

    读完某C++神作,我只记下了100句话

    .*/ */ 是错误的 表示整数、字符和布尔值的算术类型合称为整形。区分类型是因为只有知道某地址值的类型,才能知道需要多少位表示这个变量和如何解释这些位。...typedef用来定义类型的同义词。 头文件用于声明,不是定义,因而可以出现多次。定义的语句不应该放在头文件里,出现两次会导致多重定义链接错误。...C++强制要求指向const对象的指针也必须具有const特性,可以把非const对象地址赋给const指针。...派生类指针的静态类型和动态类型不一致时【基类指针指向派生类是时】,为保证删除指针调用合适的析构函数【多态】,基类析构必须为virtual。...构造函数是对象动态类型确定之前运行的,不需要定义为virtual。 引用、对象、指针的静态类型决定了能够完成的行为,动态类型有多的功能也无法使用。派生类应避免与基类成员名字冲突。

    1.8K20

    新手避坑指南:C++ 引用、内联函数与 nullptr 全解析

    引用基础 概念:给已有的变量“新名字”(别名) 使用:类型&引⽤别名=引⽤对象; 案例:在需要传指针的地方,可以用引用代替,不需要调用该指针,让形参就叫别名,改变形参就是改变实参 特性: 引用在定义的时候必须初始化...,所以不可更改,这也就是const修饰能够对常量取别名的原因 //编译器需要⼀个空间暂存表达式的求值结果(中间值)时临时创建的⼀个未命名的对象 int rd = (a+b);//可以对临时对象赋值 int...& rd = (a+b);//不可以对临时对象单纯引用(没法修改) const int& rd = (a+b);//可以用const引用(不修改) //这也是因为临时对象具有常性 double d =...指针和引用的关系与区别 引用不额外开空间,指针是开一个空间来存储地址 引用使用必须初始化,指针不是必须要求的 引用只能初始化一次,不能更改,指针可以更改指向对象 引用可以直接访问对象(别名),指针需要解引用...使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,⽽不能被转换为整数类型。 从此以后,C++里面的空指针使用nullptr,不使用NULL。

    14710

    C++中变量声明与定义的规则

    匿名命名空间:指关键字namespace后紧跟花括号括起来的一系列声明语句,具有如下特点: 在匿名命名空间内定义的变量具有静态生命周期 匿名空间在某个给定的文件内可以不连续,但是不能跨越多个文件 每个文件定义自己的匿名命名空间...(指向常量int的指针): 去除了顶层const + 保留底层const // *auto_cp = 10; // 错误: 不能修改auto_cp指向的常量 } 如果希望推断出来的auto...1. const对象必须初始化 因为const对象一经创建后其值就不能再改变,所以const对象必须初始化,但是初始值可以是任意复杂的表达式: const int i = get_size(); //...为了执行这个替换,编译器必须知道变量的初始值,如果程序包含多个文件,那么每个用了这个const对象的文件都必须得能访问到它的初始值才行(即每个文件都要定义const对象)。...允许常量引用绑定非常量对象、字面值甚至一般表达式 一般而言,引用的类型必须与其所引用对象的类型一致,但是有两个例外: 初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用类型即可,

    3.6K10

    听GPT 讲Rust源代码--srctools(29)

    vtable trait 为具有虚函数的类型提供了一个接口,通过这个接口可以访问和调用对象的虚函数。...这个 trait 允许不同类型的对象被装箱为一个指向装箱对象的指针,然后可以以泛型的方式操作这个指针。...具体来说,object trait 提供了以下方法: dyn_obj: 将一个具体类型的对象转换为泛型对象; clone_box: 克隆泛型对象的指针; as_typed_obj: 将泛型对象指针转换回具体类型的对象指针...这是因为类型的对齐要求决定了指针如何访问内存,如果对齐要求不满足,会导致内存访问错误。 Rust的clippy工具是一个用于帮助开发者检查和修复常见代码问题的插件。...例如,它可能会检查是否将函数指针转换为一个与函数指针所指向函数的大小不同的整数类型,或者是否将函数指针转换为浮点数类型。

    48910

    第2章 变量和基本类型

    4)非常量引用不能与字面值或表达式绑定到一起。 15.指针 1)指针本身是一个对象,允许赋值和拷贝,而且在生命周期内可以先后指向不同的对象。 2)无须在定义时赋初值。...3)引用不是对象,没有实际地址,不能定义指向引用的指针。 16.C++11中,最好用 nullptr来初始化空指针。不能把 int变量直接赋给指针,下面的代码是错误的。..._2.h文件,声明该常量 4 extern const int bufSize; 这样的变量具有三个特点。...4-1.允许为一个常量引用绑定非常量的对象、字面值,甚至是一个一般表达式,而类型也没有硬性要求,只要能成功类型转换即可。而普通引用则不可以引用 字面值和表达式,类型也必须一致。...// ps是一个指针,对象是指向 char的常量指针 4 // 第2行代码的两种解释方案 5 const (char) * cstr; // 错误,基本类型为 char,解释成指向 const

    88240

    C++ 变量和复合类型

    前面说了C++的基本数据类型,下面来看看在C++中如何定义变量和常量。 变量 定义和初始化 C++定义变量的方式和C语言一样,也可以在定义的同时初始化。...注意指针和变量的类型必须匹配,将int型变量的地址赋给double *类型的指针是错误的。...由于指针指向的是对象本身,所以使用解引用符修改对象会修改实际对象的值。...而引用只能和一个变量绑定,所以引用在定义的时候必须初始化,而且一旦初始化,无法再绑定到其他变量。 复合类型总结 前面介绍了引用和指针两种复合类型,这些复合类型还可以互相组合,生成更加复杂的类型声明。...这种情况和上面那种情况正好相反,这次是将指针指向的对象声明为const的,这样一来,我们无法修改指针指向的对象的值,但是我们可以修改指针指向其他对象的地址。

    1.4K100

    校长讲堂第五讲

    但是,并不需要这样,因为他们可以在一个简单的规则的帮助下很容易地构造它:以你使用的方式声明它。 每个 C 变量声明都具有两个部分:一个类型和一组对该类型求值的特定表达式。...如果 C 可以读入并理解类型,我们可以写: (*0)(); 但这样并不行,因为*运算符要求必须有一个指针作为他的操作数。另外,这个操作数必须是一个指向函数的指针,以保证*的结果可以被调用。...因此,我们需要将 0 转换为一个可以描述“指向一个返回 void 的函数的指针”的类型。...一旦我们知道了如何声明该变量,我们也就知道了如何将一个常数转换为该类型:只要从变量的声明中去掉名字即可。...它们具有真正的运算符中的最高优先级。由于函数调用比一元运算符绑定得更紧密,你必须写(*p)()来调用 p 指向的函数;*p()表示 p 是一个返回一个指针的函数。

    65631

    CA1021:避免使用 out 参数

    项 “值” RuleId CA1021 类别 设计 修复是中断修复还是非中断修复 重大 原因 公共类型中的公共或受保护方法具有 out 参数。...默认情况下,此规则仅查看外部可见的类型,但这是可配置的。 规则说明 按引用(使用 out 或 ref)传递类型要求具有使用指针的经验,了解值类型和引用类型的不同之处,以及能处理具有多个返回值的方法。...另外,out 和 ref 参数之间的区别并未得到广泛了解。 如果引用类型“按引用”传递,则该方法会使用参数来返回对象的不同实例。 按引用传递引用类型也称为使用双指针、指向指针的指针或双间接。...通过使用“按值”传递这一默认调用约定,采用引用类型的参数已经收到指向对象的指针。 指针(而不是它指向的对象)按值传递。 按值传递表示方法不能更改指针以使其指向引用类型的新实例。...为一般用户进行设计的库架构师不应指望用户能熟练运用 out 或 ref 参数。 如何解决冲突 要修复由值类型引起的此规则的冲突,需使方法返回对象作为其返回值。

    74630

    CA1045:不要通过引用来传递类型

    规则说明 按引用(使用 out 或 ref)传递类型要求具有使用指针的经验,了解值类型和引用类型的不同之处,以及能处理具有多个返回值的方法。...另外,out 和 ref 参数之间的区别并未得到广泛了解。 如果引用类型“按引用”传递,则该方法会使用参数来返回对象的不同实例。 (按引用传递引用类型也称为使用双指针、指向指针的指针或双间接。)...使用“按值”传递这一默认调用约定,采用引用类型的参数已经收到指向对象的指针。 指针(而不是它指向的对象)按值传递。...按值传递表示方法不能更改指针以使其指向引用类型的新实例,但是它可以更改它所指向的对象的内容。 对于大多数应用程序,这就足够了,并生成了所需的行为。...如何解决冲突 要修复由值类型引起的此规则的冲突,需使方法返回对象作为其返回值。 如果该方法必须返回多个值,请重新设计它以返回保存值的对象的单个实例。

    77630

    C++ const各种用法总结

    const 对象默认为文件的局部变量。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。...ri to that temporary 四 指针 1.指向const 对象的指针(指针所指向的内容为常量) 声明或定义的格式如下(定义时可以不初始化): const 类型说明符> * …...然而如果该指针指向的是一个没const 对象(如cdptr),可用其他方法修改其所指向的对象。 那么如何将一个const 对象合法地赋给一个普通指针???...= 3.14; const double *const pi_ptr = π [pi_ptr 是指向double 类型的const 对象的const 指针] 指针的指向不能被修改。...返回指针:const int *func3(); // 注意千万不要返回指向局部对象的指针,因为一旦函数结束,局部对象被释放,返回的指针变成了指向一个不再存在的对象的悬垂指针。

    2.3K10

    Rust避坑现代C++悬垂指针

    其核心思想是将资源如内存、文件句柄、锁等的生命周期与一个对象的生命周期绑定。在对象构造时获取资源,在对象析构时释放资源。从而保证资源的正确分配与释放。】)来避免悬垂指针的产生。...++项目名,注意该命令会生成带有.git的文件夹,会妨碍基于上层文件夹中.git的git命令执行,此时需要将其删除)格式化代码:先用Homebrew安装clang-format,再运行命令:clang-format...不需要共享所有权的情况。实现独占资源的转移。作为函数返回类型,表示函数转移了对象的所有权。shared_ptr是共享所有权的智能指针。多个shared_ptr可以指向同一个对象。...替换为你的Rust项目名格式化代码:运行命令:cargo fmt检查语法错误:运行命令cargo check编译:运行命令cargo build,会在target/debug文件夹中编译和构建运行:运行命令.../src/main.rs文件中原有的代码,再重复上面的格式化代码、检查语法错误、编译和运行步骤代码清单1-2的主要功能是演示Rust如何避免悬垂指针问题,特别是在使用智能指针和引用时。

    1.4K61

    《C++Primer》第十九章

    通常情况下我们使用typeid比较两条表达式的类型是否相同,或者比较一条表达式的类型是否与指定类型相同: Derived *dp = new Derived; Base *bp = dp; // 两个指针都指向...使用RTTI 在某些情况下RTTI非常有用,比如我们想为具有继承关系的类实现相等运算符时。对于两个对象来说,如果他们的类型相同并且对应的数据成员取值相同,则我们说这两个类是相等的。...,因此之前对于pdata的使用必须位于Screen类的成员或友元内部,否则程序将发生错误。...将成员函数用作可调用对象 要想通过有一个指向成员函数的指针进行函数调用,必须首先利用.*或者->*运算符将该指针绑定到特定的对象上。...,这意味着前面五个位域可能会存储在一个unsigned int中,这些二进制位能否压缩到一个整数中以及如何压缩是与机器相关的 取地址运算符&不能作用域位域,因此任何指针都无法指向类的位域 最好将位域设为无符号类型

    1.6K10

    c++从入门到进阶--引用与常量

    constexpr函数必须满足下述限制: 函数返回值不能是void类型 函数体不能声明变量或定义新的类型 函数体只能包含声明、null语句或者一条return语句 在形参实参结合后,return语句中的表达式为常量表达式...*b=15;//错误 指向非const对象地const指针(常指针 ) type const 指针 int num =10; int * const poi =#// type const...int member=10; poi=&member;//错误 指向const对象的const指针 /*const type const 指针(第一个const限定int表示指针指向的单元是常量,...该指针被称为空悬指针指向不确定的单元如果在继续使用该指针间接使用这个单元就是非法的对自由空间造成损害进而引起不可预料的错误。...返回类型和return语句 return 语句形式 return; return表达式; 非void函数必须返回一个与声明类型匹配的值否则会引起编译错误。

    1.1K20

    constexpr和常量表达式

    大意是: 一个字面值类型应具有如下特点 是一个标量类型(如整型、浮点型、物理类型和枚举类型) 或是一个具有如下特征的类: ·一个平凡的拷贝构造函数 ·一个平凡的析构函数 ·一个默认构造函数或者至少一个...一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象(如全局变量、静态变量等)。...()是一个constexpr函数时,才是常量表达式,否则语句错误 constexpr指针 需要注意的是,与const关键字不同,一个指针被定义为constexpr,关键字仅对指针有效,与指针所指的对象无关...p 指针p和q的类型相差甚远,p是一个指向常量的指针,而q是一个常量指针,其中的关键在于constexpr把它所定义的对象置为了顶层const。...与const指针类似,constexpr指针既可以指向常量也可以指向一个非常量。

    67210

    解析C++内联函数与auto关键字

    没有类型安全的检查。 内联就是C++用来替换宏工作的。具有宏的优点还修复了宏不能调试的缺点。...return 0; } 使用typedef给类型取别名确实可以简化代码,但是如果复杂的类型特别多,一个个写typedef也有点麻烦了。...2.3 auto的使用规则 auto与指针和引用结合起来使用 用auto声明指针类型时,用auto和auto*没有任何区别,但是auto声明引用类型时必须加&。...指针空值nullptr 4.1 C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。...如果一个指针没有合法的指向,我们基本按照如下方式进行初始化。

    28710
    领券