栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++对比C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++对比C语言

目录

1.命名冲突, 

c++引入了namespace来解决这个问题,c语言没有

2.using namespace std

3.C++函数参数默认值设置

4.C++支持重载


1.命名冲突, 

c++引入了namespace来解决这个问题,c语言没有

c++如下

namespace xxx {

int x = 0;

}

namespace 默认以局部变量优先(全局和局部变量比较)

加个 ::以全局变量优先,如 ::x

#include 
#include 

namespace me {
    int rand = 0;
    
}
int a = 0;
int main() {
    int a = 1;
    printf("%pn", rand);
    printf("%dn", rand);
    printf("%dn", a);
    printf("%dn", ::a); //Domain-scoped qualifier 域作用限定符
}

那么如果我们要访问me这个域里面的变量呢?(int rand = 0 这个变量)

再::前面加个me就可以了, 这也从侧面显现了namespace 的命名很重要。

举个例子,大家一起写一份文件的时候难免会遇到变量重复的情况,这时候只要在把重复的变量放在个人专属的namespace中就可以避免重复而导致编译不过的问题。c++的优势。

#include 
#include 

namespace me {
    namespace Ding {
        int rand = 0;
    }
    namespace JJ {
        int rand = 0;
    }
    
}
int a = 0;
int main() {
    int a = 1;

    printf("%dn", rand);
    printf("%dn", me::Ding::rand);
    printf("%dn", a);
    printf("%dn", ::a); //Domain-scoped qualifier 域作用限定符
}

命名空间也是能嵌套的

最后一点,如果不小心用了两个相同的命名空间,那么编译器会怎么办呢?

答:编译器不会报错,因为同一个工程允许存在相同的命名空间,编译器会把相同的命名空间合并到一起,形成一个新的命名空间

2.using namespace std

展开命名空间,可以做到少些几个子,但这是在没有变量相同的情况下才能这么做,不然还得老老实实写命名空间

#include 
#include 
namespace me {
    int a = 2;
    namespace Ding {
        int rand = 0;
    }
    namespace JJ {
        int rand = 0;
    }
    
}

using namespace me;//展开命名空间会使变量重复,就比如你的rand
int a = 0;
int main() {
    int a = 1;

    printf("%dn", rand);
    printf("%dn", Ding::rand);
    printf("%dn", a);
    printf("%dn", me::a); //Domain-scoped qualifier 域作用限定符
    printf("%dn", a);
}

如果把me::a的me::去掉的话,编译器会把a默认是局部变量(因为main函数内刚好有个局部变量----优先级最高)

所以 我们常看到 using namespace std;

这里的std实际上就是c++库的命名空间,

就像这句话

cout << "hello world" << endl;

如果不加using namespace std,这句话是无法通过编译的,要这么写

std::cout << "hello world" << std::endl;

当然你加了std的命名空间也能这么写,但是不推荐

或者你加那么std::cout 直接就能编译

这里有种骚操作

#include 
//using namespace std; 这里不放出来

int cout = 0;


int main() {
    std::cout << cout << std::endl;
    return 0;
}

这就是命名空间的优势。C++!

3.C++函数参数默认值设置

C++支持在声明并且定义的函数内对参数赋值,或者在声明的函数内赋值(定义的函数内不赋值)

,这样你在运用函数的时候不传参,编译器会自动使用对参数赋值的那个值

void function(int a = 1) {
    cout << a << endl;
}
int main() {
    function();
    function(2);
    return 0;
}

4.C++支持重载

话不多说,上图:

#include 
using namespace std;



int add(int x, int y) {
    return x + y;
}

double add(double x, double y) {
    return x + y;
}

int main() {
    cout << add(1, 2) << endl;
    cout << add(1.1, 2.1) << endl;
}

当然,C++不支持函数相同,参数不同的情况

参数不同:参数类型不同,参数顺序不同,参数个数不同

日后更新。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965777.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号