C++学习笔记——001

这篇具有很好参考价值的文章主要介绍了C++学习笔记——001。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。

 

  • <> 先去系统目录中找头文件,如果没有再到当前目录下找。所以像标准的头文件 stdio.h、stdlib.h 等用这个方法。" " 首先在当前目录下寻找,如果找不到,再到系统目录中寻找。这个用于 include 自定义的头文件,让系统优先使用当前目录中定义的。

 

  • 标准规范中规定 main 函数的返回值为 int,一般约定返回 0 值时代表程序运行无错误,其它值均为错误号,但该约定并非强制。

 

  • 块注释符(/*...*/)是不可以嵌套使用的。

 

  • 在实际项目中,为了防止将“==”误写作“=”,推荐将变量名写在右侧,编译器可以帮助寻找错误。

 

  • 全局变量和和局部变量同名时,可加域名解析在函数中引用到全局变量,不加域名解析则引用局部变量:
#include<iostream>
using namespace std;


int a = 10;


int main()
{
    int a = 20;
    cout << ::a << endl;   // 10
    cout << a << endl;     // 20
    return 0;
}

 

auto x1 = 5, x2 = 5.0, x3='r';  //错误,必须是初始化为同一类型

 

C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别

从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

 

从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。

 

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。

 

宏定义 #define 和常量 const 的区别

类型和安全检查不同:宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,会在编译阶段进行类型检查;

 

编译器处理不同:宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束于编译时期;const常量是一个"运行时"概念,在程序运行使用,类似于一个只读数据;

 

存储方式不同:宏定义是直接替换,不会分配内存,存储于程序的代码段中;const常量需要进行内存分配,存储于程序的数据段中;

 

定义域不同:

void f1 ()
{
    #define N 12
    const int n 12;
}


void f2 ()
{
    cout<<N <<endl; //正确,N已经定义过,不受定义域限制
    cout<<n <<endl; //错误,n定义域只在f1函数中
}

 

定义后能否取消:宏定义可以通过#undef来使之前的宏定义失效;const常量定义后将在定义域内永久有效;

void f1()
{
    #define N 12
    const int n = 12;


    #undef N //取消宏定义后,即使在f1函数中,N也无效了
    #define N 21//取消后可以重新定义
}

 

是否可以做函数参数:宏定义不能作为参数传递给函数;const常量可以在函数的参数列表中出现。

 

register 存储类

register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。

{
    register int miles;
}

寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 'register' 并不意味着变量将被存储在寄存器中,而是有可能存储在寄存器中,这取决于硬件和实现的限制。(计算机做运算时,必须将数据读入寄存器才能运算)

C++学习笔记——001

扫码关注公众号,查看更多精彩内容文章来源地址https://www.toymoban.com/news/detail-840660.html

到了这里,关于C++学习笔记——001的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 学习笔记-001-继承

             实现继承:                        表示一个类型派生于一个基类型,拥有改类型的所有成员字段和函数。          接口继承:                         表示一个类型只继承了函数函数签名,没有继承任何实现代码。         虚方法:                

    2024年01月20日
    浏览(42)
  • 小土堆pytorch学习笔记001

    目录 1、Pytorch环境的配置与安装。 2、pytorch编辑器的选择 (1)pycharm (下载社区版) (2)jupyter (可以交互) 3、为什么torch.cuda.is_available()返回False 4、python学习中的两大法宝函数 (1)dir() 函数:打开、看见 (2)help()函数:说明书 5、Pycharm 及Jupyter的使用对比: (1)Pych

    2024年01月25日
    浏览(34)
  • 静态curl库编译与使用(c++)

    静态curl库编译与使用:mingw https://curl.se/windows/ // 测试:设置URL地址 // curl_easy_setopt(curlHandle, CURLOPT_URL, “https://ipinfo.io/json”); // curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, 0L); // curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYHOST, 0L);

    2024年02月19日
    浏览(33)
  • Go Ethereum源码学习笔记 001 Geth Start

    首先读者需要具备Go语言基础,至少要通关菜鸟教程,知道Go语言的基本语法,这些基础教程网络上非常多,请大家自行学习。 具备语言基础了,还需要在开始这一章之前做一些准备工作: 安装Go SDK,即Go语言的开发环境; 安装GoLand,即Go语言的IDE,当然也可以选择VSCode等其

    2024年02月14日
    浏览(48)
  • C++编译静态成员函数报错: “osgGA::DriveManipulator::setEye”: 非静态成员函数的非法调用

    来看代码 但是会报错,说引用错误。 这是因为把computePosition函数定义为 static 引起的。 解决办法: computePosition函数定义为 static 不能更改了(我的代码需求,static必须存在),所以要在它内部使用,需要把其它函数也改成静态的。 更改如下: 关于.cpp文件那两行应该放在哪

    2024年02月09日
    浏览(50)
  • c++中static静态成员变量和静态成员函数、explcit和隐式类型转换、友元函数()详解

    声明为 static 的类成员 称为 类的静态成员 ,用 static 修饰的 成员变量 ,称之为 静态成员变量 ;用 static 修饰 的 成员函数 ,称之为 静态成员函数 。 静态成员变量一定要在类外进行初始化   静态成员 为 所有类对象所共享 ,不属于某个具体的对象,存放在静态区   静态成

    2024年02月04日
    浏览(50)
  • [C++] 模板进阶(非类型模板参数,特化,分离编译)

    模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。 我们举例来看一下: 注意: 1. 浮点数、类对象

    2024年02月04日
    浏览(36)
  • 《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量)

    在 代码块内部声明的变量 的缺省存储类型是自动的(automatic),也就是说它存储于堆栈中,称为自动(auto)变量 。auto就是用于修饰这种存储类型的,但它极少使用,因为代码块中的变量在缺省情况下就是自动变量。 在程序执行到声明自动变量的代码块时,自动变量才被创

    2024年02月10日
    浏览(44)
  • 【C++干货铺】非类型模板 | 模板特化 | 模板分离编译

    ========================================================================= 个人主页点击直达: 小白不是程序媛 C++系列专栏: C++干货铺 代码仓库: Gitee ========================================================================= 目录 非类型模板参数 模板的特化 什么是模板特化? 函数模板特化 类模板的特化 全

    2024年02月04日
    浏览(57)
  • 【C++】模板进阶——非类型模板参数、模板特化、模板分离编译

    模板参数分为类型形参 与 非类型形参 类型形参 :出现在模板参数列表中,跟在class或者typedename之类的参数类型名称。 非类型形参 :用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。 非类型模板参数的优势: 有些容器需要在创建对象

    2024年02月01日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包