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

C++ 初探:不要‘下次一定’,立即开始你的C++之旅

namespace,命名空间 在C/C++中,变量、函数、类大量存在,由于它们的大量存在而可能导致名称使用上的冲突。namespace关键字,是针对名称冲突而出现的。...+的域 C++中域有函数局部域、全局域、命名空间域、类域,域影响的是变量/函数/类型的出处的逻辑, 有了域隔离(不同的域可以同名,同一个域不可以定义同一个东西),名字冲突的问题就解决了。...例如,我传递100w个大小的整形数组,来解决某问题,传递数组时需要临时开辟100w个大小的整形空间,非常浪费,这里对数组使用引用就可以进行优化,从而提高效率。指针也能达到这种效果。 ​...解决办法:将返回值进行引用,这里返回的就不会将返回值拷贝在临时对象中,而是给这个返回值取了一个别名,返回的是栈顶元素的别名,对别名加加的结果是栈顶元素大小加1。...所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做临时对象。

5610

快速从C过度C++(二):引用,内联函数,nullptr

作为函数返回值 引用也可以作为函数的返回值,通常用于返回类成员变量或静态变量(即常量)。...(因为const也只具有只读性,不会有权限放大的问题) const int& ref = 42; // 正确:绑定到临时对象 避免拷贝:const 引用可以避免不必要的对象拷贝,特别是在函数参数传递时。...内敛函数 内联函数(Inline Function) 是C++中的一种函数优化机制,通过在函数定义前加上 inline 关键字,建议编译器将函数调用处直接替换为函数体代码,以减少函数调用的开销。...它解决了 C 语言中 NULL 的一些问题,提供了更安全、更清晰的空指针表示方式。...类型安全问题 在 C++ 中,NULL 通常被定义为 0 或 (void*)0,这可能导致类型混淆。

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

    CC++常见面试知识点总结附面试真题—-20220326更新

    在C++中应该优先考虑使用智能指针. 9. C++11 中有哪些智能指针?shared_ptr 的引用计数是如何实现的?unique_ptr 的unique 是如何实现的?...C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程...const常量加入符号表,以后(仍然在编译期)遇到这个变量会从符号表中查找,所以在C++中是不可能修改到const变量的。...~Stack() // s析构 执行代码的过程中调用拷贝构造,将内存中的内容逐个拷贝,在 C++ 11 中可以借助右值引用实现移动拷贝构造和移动赋值来解决这个问题。...虚继承是解决C++多重继承问题(其一,浪费存储空间;第二,存在二义性问题)的一种手段。

    1.6K10

    从基础入门到学穿C++(C++语法基础篇)【超详细】【一站式速通】

    return 0; } 如何合理使用std命名空间?...在日常中,直接展开使用using namespace std即可。 在大的工程之中,因为涉及到的变量和类等繁杂,为了避免命名冲突,我们一般使用std::cout这种方式进行使用标准库中的功能。...因为我们在调用函数传递参数的时候,都是从左往右依次传递的,所以如果不是全缺省,就要从右往左依次缺省。另外,缺省值必须是常量或者全局变量。...在链接阶段,到其他目标文件符号表中区去找到这个函数的地址。...objdump -S executable_file 可以使用上面的命令进行反汇编二进制目标文件的命令 ##nullptr(空指针) 在C++中,我们在表示空指针的时候要把C语言中惯用的NULL换成nullptr

    81910

    【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)

    定义 出现的意义:解决各种函数、关键词和类的名称冲突问题。 定义方式:namespace + 命名空间的名字 + { } (注意!}...带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参 缺省参数不能在函数的声明和定义中同时出现。如果声明和定义分离的话,建议在声明那里缺省,这样便于在头文件里查找修改。...内联函数 1. 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方把函数内容展开,从而替换对函数的调用,没有函数压栈的开销,内联函数可以提升程序运行的效率。...因为inline既要要被展开,就没有函数地址了,链接就会找不到 2. c++替代宏的方法 常量定义 :换用const来修饰 函数定义: 换用内联函数 七. nullptr与NULL NULL 预处理后...:0 (可能被定义为字⾯常量0,使用需要类型转换) nullptr 预处理后:(void*)0 (隐式地转换为指针类型,避免类型转换问题) 故在c++,可以使用nullptr代替NULL传递空指针。

    7510

    万字长文【C++】高质量编程指南

    2,头文件中只存放声明,而不存放定义,注意:C++语法中,类的成员函数可以再声明的同时被定义,并且自动成为内联函数,这虽然会带来书写上的方便,但却造成了风格不一致,建议将成员函数的定义与声明分开,不论该函数体有多么小...const常量完全可以取代宏常量。 (1)不能再类声明中初始化 const数据成员,因为类的对象未被创建时,编译器不知道 SIZE的值是多少。...new/delete是C++运算符,能完成动态内存分配和初始化工作,如何实现动态内存管理。...//由于编译后的名字不同,C++程序不能直接调用C函数,因此,c++提高了一个C连接交换指定符合 extern “C”来解决这个问题。...C++的函数内联是如何工作的?

    1.6K20

    【C++】从入门到精通第一弹——基础知识

    内联函数最主要的功能就是提高程序的运行速度,内联函数主要是编译代码与其他程序代码内联起来。 所以我们要综合去考虑,有选择的使用内联函数。...但宏的缺点就是宏不能按值传递,所以如果当我们使用c的宏执行了类似函数的功能时,要考虑将其转换为c++的内联函数。...使用内联函数可以减少函数调用带来的开销(在程序所在文件内移动指针寻找调用函数地址带来的开销),但它只是一种解决方案,编译器可以忽略内联的声明。...该参数f对应的实参为无名枚举类型中的枚举常量(又称格式化常量),可以同时使用一个或多个常量,每两个常量之间要用按位或操作符连接。...能够实现复杂的数据结构,还可以定类实现面向对象编程,类和指针结合可以实现高效的程序。 C++语言中,运算符十分丰富,共有30多个,如算术、关系、逻辑、位、赋值、指针、条件、逗号、下标、类型转换等。

    22150

    C++ 面试必备:常见 C++ 面试题汇总及详细解析

    例如,C++ 中可以重载函数来处理不同类型的数据,如整数、浮点数等。在使用函数时,根据传递给函数的参数类型和个数来自动选择对应的函数进行调用。...常量指针和指针常量的区别在于指针所指向的内容可不可变,需要根据具体情况而定。 P.S. 感兴趣的同学可以看我之前帖子,有详细介绍 如何避免野指针?...C++ extern作用? 在C++中,extern关键字用于声明一个已经在别处定义的变量、函数或类的引用,从而允许在一个文件中使用在其他文件中定义的全局变量、函数或类。...例如,如果有一个类的定义在一个.h文件中,那么在多个.cpp文件中可以使用extern关键字来声明这个类的引用,从而可以在这些文件中使用这个类的成员函数。 C++函数调用的过程?...左值是可以寻址的,有名字的,非临时的变量或表达式;右值是不能寻址的,没有名字的,临时的,生命周期在某个表达式之内的变量或表达式。 P.S.

    2.2K30

    开启C++之旅(下):引用、内联函数及现代特性(auto和范围for循环)

    在 C++ 中,隐式类型转换、截断和强制类型转换都可能导致临时变量的创建,并且这些临时变量通常具有常量性质,那就需要用常引用 加了const就好了 在 C++ 中进行类型转换时,通常会创建一个临时变量来存储转换后的结果...这个临时变量是一个匿名对象,它存储了转换后的值,但并不会影响原始变量的值。...{ int temp = b; b = a; a = temp; } 1.4.2做返回值 在 C++ 中,函数可以返回引用,以避免在返回函数结果时产生拷贝。...3.没有类型安全的检查 为了解决缺点,c++中采用: 常量定义 换用const enum 短小函数定义 换用内联函数 2.1内联函数概念 以inline修饰的函数叫做内联函数,编译时C...现在在其他源文件里使用内联函数时不行的 3. auto关键字 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在: 类型过长难于拼写 含义不明确导致容易出错 auto就是来解决这个问题 3.1

    25010

    .NET面试题解析(05)-常量、字段、属性、特性与委托

    常量在使用时,是把常量的值内联到IL代码中的,常量类似一个占位符,在编译时被替换掉了。...这个其实也很好解决,在非默认构造函数后加一个“:this()”就OK了,或者显示的在构造函数里初始化字段。...正因为这个问题,曾经在项目开发中遇到一个因此而产生的Bug: 这个Bug是关于序列化的,有一个类,定义很多个(自动)属性,这个类的信息需要持久化到本地文件,当时使用了.NET自带的二进制序列化组件。...简单来说,委托类似于 C或 C++中的函数指针,允许将方法作为参数进行传递。...简单来说,委托类似于 C或 C++中的函数指针,允许将方法作为参数进行传递。

    1K20

    .NET面试题解析(05)-常量、字段、属性、特性与委托

    常量在使用时,是把常量的值内联到IL代码中的,常量类似一个占位符,在编译时被替换掉了。...这个其实也很好解决,在非默认构造函数后加一个“:this()”就OK了,或者显示的在构造函数里初始化字段。...正因为这个问题,曾经在项目开发中遇到一个因此而产生的Bug: 这个Bug是关于序列化的,有一个类,定义很多个(自动)属性,这个类的信息需要持久化到本地文件,当时使用了.NET自带的二进制序列化组件。...简单来说,委托类似于 C或 C++中的函数指针,允许将方法作为参数进行传递。...简单来说,委托类似于 C或 C++中的函数指针,允许将方法作为参数进行传递。

    83610

    【C++】初识C++(下)

    ,在函数传参时,形参只需要是实参的引用,形参改变就可以影响实参,此刻不需要再考虑指针,方便了很多,当然应用的存在不仅仅方便了这一点 • 引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引...,在类型转换中会产⽣临时对象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。...• 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做 临时对象 。...• inline对于编译器⽽⾔只是⼀个建议,也就是说,你加了inline编译器也可以选择在调⽤的地⽅不展 开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。...# define NULL ((void *)0) # endif # endif • C++中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)的常量

    6610

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

    A中fun函数 return 0; } 36、C++的多态如何实现 C++的多态性,一言以蔽之就是: 在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据所指对象的实际类型来调用相应的函数...,如何将函数内联呢?...,再用拷贝构造去初始化这个临时对象,在函数中与形参对应,函数调用结束后析构临时对象 情况3在执行return时,理论的执行过程是:产生临时对象,调用拷贝构造函数把返回对象拷贝给临时对象,函数执行完先析构局部变量...nullptr在C++11被引入用于解决这一问题,nullptr可以明确区分整型和指针类型,能够根据环境自动转换成相应的指针类型,但不会被转换为任何整型,所以不会造成参数传递错误。...,在以前的C语言中,全局变量和静态变量又分为初始化的和未初始化的,在C++里面没有这个区分了,它们共同占用同一块内存区,在该区定义的变量若没有初始化,则会被自动初始化,例如int型变量自动初始为0 常量存储区

    2.6K40

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

    A中fun函数 return 0; } 36、C++的多态如何实现 C++的多态性,一言以蔽之就是: 在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据所指对象的实际类型来调用相应的函数...,如何将函数内联呢?...,再用拷贝构造去初始化这个临时对象,在函数中与形参对应,函数调用结束后析构临时对象 情况3在执行return时,理论的执行过程是:产生临时对象,调用拷贝构造函数把返回对象拷贝给临时对象,函数执行完先析构局部变量...nullptr在C++11被引入用于解决这一问题,nullptr可以明确区分整型和指针类型,能够根据环境自动转换成相应的指针类型,但不会被转换为任何整型,所以不会造成参数传递错误。...,在以前的C语言中,全局变量和静态变量又分为初始化的和未初始化的,在C++里面没有这个区分了,它们共同占用同一块内存区,在该区定义的变量若没有初始化,则会被自动初始化,例如int型变量自动初始为0 常量存储区

    2K10

    一文掌握C++基本语法

    C++关键字 2. 命名空间 变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。...在下面将double赋给int别名的过程中,编译器会产生“临时变量”,将double d中整数部分赋给临时变量, 这个临时变量再将这个整数赋给另一个int类型的临时变量,最后int把临时变量赋给rd,也就是说...另外引用作返回值也会提高效率 6.5 传值、传引用效率比较 以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型...在学习C语言的时候,我们遇到函数体短小且频繁调用的函数的时候,采用的优化方式是使用宏进行替换,但是宏太繁琐啦,难以看懂,因此c++就产生了内联函数。 那么内联函数是如何进行优化的呢?来看代码。...1.内联函数在debug版本下支持调试,而宏不支持 2.内联函数就是普通函数的写法,解决了宏晦涩难懂的问题 8. auto关键字(C++11) 8.1 auto简介 在早期C/C++中auto的含义是

    1.8K10

    C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

    全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。...可以用 atexit 注册一个函数,它会在main 之后执行 3、C++里面如何声明const void f(void)函数为C程序中的库函数?...宏定义在预处理的时候进行简单的字符串替换,而内联函数在编译时在每个调用内联函数的地方将函数展开,这样不用使内联函数占用栈空间,提高效率。...c++引入了智能指针,C++智能指针的本质就是避免悬空指针的产生。 产生原因及解决办法: 野指针:指针变量未及时初始化 => 定义指针变量及时初始化,要么置空。...C++中,初始化时在执行相关代码时才会进行初始化,主要是由于C++引入对象后,要进行初始化必须执行相应构造函数和析构函数,在构造函数或析构函数中经常会需要进行某些程序中需要进行的特定操作,并非简单地分配内存

    2.2K20

    【C++】命名空间&缺省参数&函数重载&引用&内联函数

    函数重载 6-1.面试题: 6-1-1.为什么C语言不支持重载,C++支持?C++是如何支持的?...(组件)中的函数的时候就会表示找不到.这时extern "C"的作用就凸显出来了. 6-1-2-2.extern "C"的作用和为什么可以通过extern "C" 解决这个问题?...基石:C++兼容C的语法,C++知道C语言的函数名规则,所以在有C和C++的函数名规则冲突的时候,在C++程序中使用extern "C" +函数声明  ,就可以解决这个问题. 6-1-2-3.extern..."C"的使用场景举例: 下面以谷歌自己用C++写的tcmalloc代替mallc ,然后写成了一个中间件程序,后来一个C语言程序想用这个中间件程序代替mallc时他遇到的问题和解决办法: 变式: 如果加完了...const int& ra = a;//对 int b = 10;//-可读可写 const int& rb = b;//对,权限的缩小允许-可读不可写 return 0; } 只要是有类型差异在赋值转换时都会产生临时变量

    82730

    C++入门

    ,就会发生编译错误,这是因为: C语言没办法解决类似这样的命名冲突问题 而这里我们自己定义的变量“rand”就和函数名有冲突,就会报出“重定义”的编译错误的提示 而这里我们的C++就给出了很好的解决办法...我们还要记住一个点: 临时变量是常量!...传值、传引用效率比较 以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的...f@@YAXH@Z),该符号在函数 _main 中被引用 另外,这里扩展一个知识点: 在C++中,const和enum就代替了C语言中的宏常量 而inline就代替了宏函数 宏的优缺点如下: 优点...指针空值nullptr NULL实际是一个宏,在传统的C头文件(stddef.h)中 NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量 在C++98中,字面常量0既可以是一个整形数字

    10410
    领券