C++ 命名空间

文章讲述了C语言中避免命名冲突的函数命名原则,以及C++中引入命名空间的概念来解决这一问题。通过示例展示了如何在不同命名空间中定义和调用函数,以及如何使用using关键字简化调用。同时,强调了不推荐使用`usingnamespace`全局导入和在头文件中使用的原因,以防止潜在的命名冲突和代码清晰度下降。
摘要由CSDN通过智能技术生成

namespace

C语言

C语言中没有命名空间的概念,为了防止名字重复,一般函数的定义原则是库+函数名。例如:GLFWInit等。看到名字就知道是什么库的什么函数。

C++

命名空间的引入是为了解决命名冲突。当不同两个命名空间有形式相同的函数时,可以通过命名空间进行区别:(功能相当于注释部分)

// apple_print()
namespace apple{
    void print(const char* text)
    {
        std::cout << text << std::endl;
    }
}

// orange_print()
namespace orange{
    void print(const char* text)
    {
        std::string temp = text;
        std::reverse(temp.begin(), temp.end());
        std::cout << temp << std::endl;
    }
}

int main()
{
    char* a = "hello";
    // apple_print(a);
    // orange_print(a);
    apple::print(a); 	//	hello
    orange::print(a); 	//	olleh
    
}

如果有多个命名空间嵌套的时候,可以使用namespace将复杂的嵌套命名用新的名字代替,如下:

namespace apple{ 
    namespace function{
        void print(const char* text)
        {
            std::cout << text << std::endl;
        }
    }    
}

int main()
{
    namespace appfunc = apple::function;
    char* a = "hello";
    appfunc::print(a);
    orange::print(a);
    
}

另外,对于一些常用的函数,可以使用using来减少命名空间的书写:

using orange::print;
print("hello"); 	// olleh

但不管如何使用,都需要注意代码是否清晰,是否能够分辨到底调用的是哪个具体函数。

using namespace

using namespace std是一个很多初学者常用的方式,但这种方式并不推荐,因为会容易命名冲突或使用混淆。例如,如果引用一个自己写的库(ABC),里面重新实现了一个vector,使用using namespace std以后,你并不知道你调用的到底是哪个vector。因此比较推荐的方法是,将std::写出来,不用using namespace std。

另外,不要在头文件中使用using namespace。头文件使用这个会导致,通过命名空间来避免命名冲突或使用冲突的好处消失了。(头文件的作用域更广)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值