C++简介以及C++入门基本知识

本文详细介绍了C++编程语言的基础知识,包括C++的发展历史、关键字变化、命名空间、输入输出、缺省参数、函数重载、引用、内联函数、auto关键字和指针空值nullptr的使用。深入讲解了C++的关键概念,如函数重载的实现原理、引用的特性和效率对比、内联函数的优势,以及nullptr的安全性。适合C++初学者和希望巩固基础知识的开发者阅读。
摘要由CSDN通过智能技术生成

目录

1、C++简介

2、C++关键字

2.1关键字的改变

3、命名空间

3.1命名空间的定义

3.2命名空间的使用

4.C++输入&输出

5、缺省参数

5.1缺省参数的概念

5.2缺省参数分类

6、函数重载

6.1函数重载概念

面试题:为什么需要函数重载?

6.2名字修饰

编译器如何解决命名冲突

重载函数的调用匹配

编译器解析重载函数调用步骤:

重载解析:

面试题:

7、引用

7.1引用概念

 7.2引用特性

7.3常引用

7.4引用的使用场景

7.5传值、传引用效率比较

7.5.1传参传引用和传值

7.5.2返回值传引用和传值

7.6引用和指针的区别

8、内联函数

8.1概念

8.2特性

面试题:

9、auto关键字

范围for循环

范围for的使用条件

10、指针空值nullptr

NULL

nullptr和nullptr_t


1、C++简介

    C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 

    C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

    世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。

    1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。

     20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。第一次修订是在1985年,第二次修订是在1990年,而第三次修订发生在c++的标准化过程中。在20世纪90年代早期,人们开始为C++建立一个标准,并成立了一个ANSI和ISO(Intemational Standards Organization)国际标准化组织的联合标准化委员会。该委员会在1994年1月25曰提出了第一个标准化草案。在这个草案中,委员会在保持Stroustrup最初定义的所有特征的同时,还增加了一些新的特征。

     在完成C++标准化的第一个草案后不久,发生了一件事情使得C++标准被极大地扩展了:Alexander stepanov创建了标准模板库(Standard Template Library,STL)。STL不仅功能强大,同时非常优雅,然而,它也是非常庞大的。在通过了第一个草案之后,委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出了C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。

    委员会于1997年11月14日通过了该标准的最终草案,1998年,C++的ANSI/IS0标准被投入使用。通常,这个版本的C++被认为是标准C++。所有的主流C++编译器都支持这个版本的C++,包括微软的Visual C++和Borland公司的C++Builder。

2、C++关键字

ISO C++98/03关键字共63个,此处严格按标准原文排版:

asm

do

if

return

typedef

auto

double

inline

short

typeid

bool

dynamic_cast

int

signed

typename

break

else

long

sizeof

union

case

enum

mutable

static

unsigned

catch

explicit

namespace

static_cast

using

char

export

new

struct

virtual

class

extern

operator

switch

void

const

false

private

template

volatile

const_cast

float

protected

this

wchar_t

continue

for

public

throw

while

default

friend

register

true

 

delete

goto

reinterpret_cast

try

 

2.1关键字的改变

C++11 关键字共73个。

新增关键字:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local。 

auto 的意义改变。 

register 被视为过时的(可能在未来标准移除)。 

export 因为实现支持太少(仅Edison Design Group的前端支持),编译效率低下,取消原有意义(仍是关键字,但使用它的程序是错误的),改为保留给未来标准使用。

3、命名空间

3.1命名空间的定义

定义命名空间,我们需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

#include<iostream>
using namespace std;
namespace N1//N1为命名空间的名称
{
    int a;//命名空间既可以定义变量,也可以定义函数
    int b;
    int Add(int left,int right)
    {
        return left+right;
    }
    namespace N2//命名空间可以嵌套
    {
        int c;
        int d;
    }
//同一个空间中允许存在多个相同名称的命名空间
//编译器最后会合成同一个命名空间
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。命名空间可以避免命名冲突或名字污染

3.2命名空间的使用

命名空间的使用有三种方式:

  • 加命名空间名称及作用域限定符
int main()
{
	printf("%d\n", N1::a);
	return 0;
}
  • 使用using将命名空间中成员引入
using N1::a;
int main()
{
	printf("%d\n", a);
	return 0;
}
  • 使用using namespace 命名空间名称引入
using namespace N1;
int main()
{
	printf("%d\n", a);
	printf("%d\n", b);
	re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值