当前位置:网站首页 > C++编程 > 正文

vs怎样创建一个新项目c语言(如何用vs新建一个c++项目)



C++兼容C语⾔绝⼤多数的语法,所以C语⾔实现的helloworld依旧可以运⾏,C++中需要把定义⽂件 代码后缀改为.cpp,vs编译器看到是.cpp就会调⽤C++编译器编译,linux下要⽤g++编译,不再是gcc

当然C++有⼀套⾃⼰的输⼊输出,严格说C++版本的helloworld应该是这样写的。

namespace的价值

在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全 局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的。 c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,C++引⼊namespace就是为了更好的解决 这样的问题。

namespace的定义

下面这代码,命名空间为bit,在使用bit命名空间的时候,前面要加bit::

局部域出了生命周期就销毁了。 命名空间域就是为了跟全局域进行隔离的,不能把命名空间域定义在局部。

命名空间可以嵌套

多⽂件中可以定义同名namespace,他们会默认合并到⼀起,就像同⼀个namespace⼀样

命名空间的使用

编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。所以下⾯程序会编译报错。所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:

下面这个代码我们可以看到“a”未声明的标识符,因为a不能访问到fang里的a。

using将命名空间中某个成员展开

using可以把命名空间的成员暴露到全局,。

注意的是全局变量的名字不能和命名空间的成员名字一样。

展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。

下面这代码,using单独暴露a在全局变量,

打印b可以访问fang里的b成员,也可以访问全局变量的b,单独暴露可以避免全部暴露带来的名字冲突。

结果:

std::cout标准输出流,它是把数值转换成字符输出到屏幕(终端)上的,如果本身就是字符就不用转换。

std::cin的标准输⼊流,它就是把在屏幕(终端)上输入的字符转换成对应的整行或浮点型,给给变量。

std::endl是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。

std::cout标准输出流

c++的标准输出流(可以自动识别类型)然后输出,不像c语言一样,需要指定类型输出。

结果:

但是要怎么换行呢,我们可以直接用std::endl这是一个函数。

std::endl换行

相当于插⼊⼀个换⾏字符加刷新缓冲区

std::cin的标准输⼊流

std::cin的标准输⼊流,它就是把在屏幕(终端)上输入的字符转换成对应的整行或浮点型,给给变量。

输入了5和9.9,输出了5和9.9。

可以把cout和cin暴露出来,这样就不用在前面加std::了

缺省参数就是在行参里给一个赋值,就是缺省参数,

不传参时,使用的就是缺省参数,传参时,使⽤指定的实参。

全缺省

全缺省就是全部都是缺省参数,不传参时,使用的就是缺省参数,传参时,使⽤指定的实参,

传1的时候,a就是1了,传1和2的时候,a就是1,b就是2,传1,2,3的话,a是1,b是2,c是3。

半缺省

半缺省我们可以看到行参a没有被赋值,b和c都被赋值了,这就是半缺省。

缺省参数不能声明和定义同时给,能在声明给。

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同名函数的。

函数重载就像是同一个函数,不同的行为。

参数类型不同

类型不同,也可以找到对应的函数。

参数个数不同

参数的个数不同,也可以找到对应的函数。

参数的顺序不同

参数的顺序不同,也可以找到对应的函数。

返回函数不同不是函数重载

返回函数不同不是函数重载,因为调⽤时也⽆法区分

下⾯两个函数构成重载,个数不同 但是f()调⽤时,会报错,存在歧义,编译器不知道调⽤谁。

是构成重载,但是不能调用。

引⽤的概念和定义

引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。⽐如:⽔虎传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋⻛";林冲,外号豹⼦头;

类型 & 引⽤别名 = 引⽤对象;

C++中为了避免引⼊太多的运算符,会复⽤C语⾔的⼀些符号,⽐如前⾯的<<?和?>>,这⾥引⽤也和取地址使⽤了同⼀个符号&,⼤家注意使⽤⽅法⻆度区分就可以。(吐槽⼀下,这个问题其实挺坑的,个⼈觉得⽤更多符号反⽽更好,不容易混淆)

下面这代码我们可以看到,给a变量取别名为b和c,

也可以给别名b取别名,g相当于还是a的别名,g++相当于a++,

也就是a这一块空间地址,有很多个名字。,它们都是同一块空间。

引⽤的特性

当然指针也是可以取别名的,p1取了a的地址,p1的别名是p2,p2也就是a的地址,

p2 = &e 这个,p2本来是指向a的,现在被指向e了,所以打印出了的是99。

注意:引⽤不能替代指针因为引⽤不能改变指向,比如单链表这些,需要改变指向的就不能用。

引⽤的使⽤

我们可以看到jh这个函数,传了a和b过去,x取的是a的别名,y取的是b的别名,所以交换还是a和b。

结果:

我们可以看到语句交换了

引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引⽤对象时同时改变被引⽤对象。

我们这里+10的话,加的是临时对象,那要怎么解决这种问题呢?

那就要用到引⽤返回了,这样返回的就是别名了,加的也是数组里的数值了。

结果:

引用返回在有些场景是不能用的,下面这一张图我们可以看到吗,a引用返回,但是局部空间都销毁,加10就越界访问了。

⼀些主要⽤C代码实现版本数据结构教材中,使⽤C++引⽤替代指针传参,⽬的是简化程序,避开复杂的指针,但是很多同学没学过引⽤,导致⼀头雾⽔。

const引⽤

权限不能放大,我们可以看到被const修饰的变量,就不能在引用了,const引用就可以了。

权限可以缩小,被const引用的ps不能修改,但是b可以。

需要注意的是类似 int& rb = a*3; double d = 12.34; int& rd = d; 这样⼀些场 景下a*3的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产⽣临时对象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。

rd引用的是临时变量,所以需要const引用

引用传参

const可以引用以下对象

1.const对象

2.普通对像

3.临时对象

指针和引⽤的关系

C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有⾃⼰的特点,互相不可替代。

⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就不需要建⽴栈帧了,就可以提⾼效率。

宏函数

inline不建议声明和定义分离到两个⽂件,分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。

NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,可以看到如下代码:

C++是0;

C语言是((void *)0);

到此这篇vs怎样创建一个新项目c语言(如何用vs新建一个c++项目)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • max3232原理图(max3232cse原理图)2025-07-15 09:00:07
  • dhclient(dhclient命令找不到)2025-07-15 09:00:07
  • libco源码分析(licode 源码分析)2025-07-15 09:00:07
  • pcp文件是什么意思(pcf文件是什么意思)2025-07-15 09:00:07
  • plc10ms定时器(plc10ms定时器与100ms定时器区别)2025-07-15 09:00:07
  • 如何解决tomcat乱码(tomcat解决乱码问题)2025-07-15 09:00:07
  • vs创建c++项目步骤(vs c++ 6.0 创建c程序)2025-07-15 09:00:07
  • sigmod会议审稿时间(sigcomm会议2019论文集)2025-07-15 09:00:07
  • cp15(cp1500上市时间)2025-07-15 09:00:07
  • 编程入门先学什么scratch(孩子编程入门先学什么)2025-07-15 09:00:07
  • 全屏图片