namespace命名空间

kiplove kiplove     2022-09-02     586

关键词:

一、命名空间的定义

namespace 命名空间的名字 {类/变量/函数/模板/其他命名空间};

命名空间空间可以定义在全局作用域和其他命名空间中,但不能定义在函数或类的内部。

 

二、命名空间的作用域

每一个命名空间都是一个作用域,定义在某个命名空间中的名字可以被该命名空间内的其他成员访问,也可以被这些成员的内嵌作用域中的任何单位访问。

namespace nsp{
    int num=10;
    class ab
    {
        public:
        int val(){return num;}
    };
    }
int val(){return num;}     //num未定义

 

命名空间可以使不连续的,也就是说可以定义一个新的命名空间,也可以为已经存在的命名空间添加新成员

namespace nsp{
    int num=10;
    class ab
    {
    public:
        int val(){return num;}
        ab& operator=(const ab&);
    private:
        string Simat;
    };
    }
namespace nsp{
    ab& ab::operator=(const ab&rs)
    {
        if(this!=&rs)
        {
            ab ls(rs);
            string temp=ls.Simat;
            ls.Simat=Simat;
            Simat=temp;
        }
        return *this;
    }
}

 

全局作用域中定义的名字也就是定义在全局命名空间中,他以隐式的方式声明,因而也不会有名字。

我们访问可以用

::member_name   //表示一个全局命名空间的一个成员

 

未命名的命名空间指那么namespace之后直接接花括号,他具有静态生命周期(用于取代静态声明)。

形如 namespace {int i;}

 

三、命名空间的使用

命名空间别名

namespace 别名=原来的名字; //主要用于名字过长

using 声明

一条using声明语句一次只引入命名空间的一个成员

using 指示

using指示将某个命名空间所有名字可见

namespace pro1
{
    int i=1;
    int j=2;
}
namespace pro2
{
    int k=3;
    int m=4;
}
void f()
{
    using pro1::i;     //using声明
    using namespace pro2;   //using 指示
    cout<<i<<" "<<k<<endl;
    //  cout<<j<<endl;     error: ‘j‘ was not declared in this scope
}

 

四、命名空间查找规则

常规查找规则:由内到外依次查找每个外层作用域。

实参相关的查找:当我们给函数传递一个类类型对象时,除了常规的作用域查找,还继续查找实参类所属的命名空间(指针与引用同样有效)

//下面两种调用等价
operator>>(std::cin,s);  //在没有声明string的operator>>时我们可以直接使用

std::string s;
std::cin>>s;

友元声明与实参相关的查找:

namespace pro1
{
    class C{
        friend void f2();
        friend void f(const C&);
    };
    void f2()
    {

    }

    void f(const pro1::C& a)
    {

    }
}



void f3()
{
    pro1::C cobj;
    f(cobj);    //f在C所属的命名空间进行了隐式声明(实参cobj),所以可以被找到
//   f2();      //没有形参所以找不到
}

重载与命名空间

using声明的是一个名字所以对于一个函数的声明只能有函数名

using NS::print(int);  //这是错误的

using NS::print;  //只声明一个函数名

因而一个using声明会包括所有的重载函数版本

using指示则会将命名空间的某个函数与作用域内的同名函数都作为重载函数版本

namespace AW
{
   int print(int);  
}

namespace Pri
{
  double print(double);  
}

using namespace Pri;
using namespace AW;

string print(string);

int main()
{
  print(1);   //调用AW::print
  print(1.1);  //调用Pri::print
  print("abc");    
  return 0;    
}

 

kubenetes之namespace(命名空间介绍)(代码片段)

namespace(命名空间)1.namespace介绍命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间,例如,可以为test、devlopment、production环境分别创建各自的命名空间。命名空间适用于存在很多... 查看详情

kubernetes集群命名空间(namespace)(代码片段)

Kubernetes集群命名空间(Namespace)一、命名空间(namespace)作用二、查看namespace三、查看namespace里的资源四、创建namespace4.1命令创建4.2YAML文件创建五、删除namespace5.1命令删除5.2YAML文件删除一、命名空间(namespace)作用Namespace是... 查看详情

c++命名空间(namespace)

参考文章:C++中的namespace 查看详情

01_2_namespace命名空间

01_2_Namespace命名空间1. Namespace_命名空间namespace决定了action的访问路径,默认为””,可以接收所有路径的actionnamespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action。na... 查看详情

关于命名空间namespace

...白符都不能出现在命名空间的声明之前:<html><?phpnamespaceMyProject;//命名 查看详情

c++之命名空间(namespace)(代码片段)

...命名空间的定义3、命名空间的使用3.1、使用(using  namespace 命名空间名称) 直接全部展开到全局3.2、使用(命名空间名称 ::要使用的变量名/函数名/类名)在访问时,指定命名空间3.3、折中第一... 查看详情

c++之命名空间(namespace)(代码片段)

...命名空间的定义3、命名空间的使用3.1、使用(using  namespace 命名空间名称) 直接全部展开到全局3.2、使用(命名空间名称 ::要使用的变量名/函数名/类名)在访问时,指定命名空间3.3、折中第一... 查看详情

atitit 深入理解命名空间namespace javac#phpjs

Atitit 深入理解命名空间namespace javac#phpjs 1.1.Namespace还是package11.2.import同时解决了令人头疼的include11.3.在不支持ns的语言里面使用ns,前缀发11.4.常用命名空间的统计(约150个)11.5.命名空间21.5.1.在struts2中21.6.Linux就支持6... 查看详情

GAE,删除 NDB 命名空间

】GAE,删除NDB命名空间【英文标题】:GAE,deleteNDBnamespace【发布时间】:2013-09-1421:59:49【问题描述】:在GoogleAppEngine中,使用NDB,如何完全删除整个命名空间?以下代码删除所有实体:defdelete(namespace):namespace_manager.set_namespace(namesp... 查看详情

小白学习c++教程十三c++命名空间namespace(代码片段)

@Author:Runsen文章目录访问命名空间嵌套命名空间命名空间别名任何C++程序都有声明namespace,比如下面的C++程序没有声明namespaceintmain()intvalue;value=0;doublevalue;value=0.0;编译器错误:'value' 查看详情

c++基础学习笔记命名空间namespace的理解和使用(代码片段)

...识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对 查看详情

02c++namespace命名空间(代码片段)

一、C++命名空间基本常识所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。1.<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上,在你的编译器include文件... 查看详情

c++之命名空间(namespace)(代码片段)

...命名空间的定义3、命名空间的使用3.1、使用(using  namespace 命名空间名称) 直接全部展开到全局3.2、使用(命名空间名称 ::要使用的变量名/函数名/类名)在访问时,指定命名空间3.3、折中第一... 查看详情

“clr-namespace” URI 指的是程序集中未包含的命名空间

】“clr-namespace”URI指的是程序集中未包含的命名空间【英文标题】:The\'clr-namespace\'URIreferstoanamespacethatisnotincludedintheassembly【发布时间】:2011-03-2610:52:53【问题描述】:我试图在我的XAML中包含一些转换值的类。但是,我在编译... 查看详情

kubernetes设置命令行的命名空间(代码片段)

...在的命名空间:arduinokubectlconfigview--minify--output\'jsonpath=..namespace\'如果当前没有设置命名空间,则会显示<none>。如果需要切换到另一个命名空间,可以使用以下命令:arduinokubectlconfigset-context--current--namespace=<NAMESPACE>其中... 查看详情

c++---namespace命名空间(代码片段)

1.C++命名空间的引入一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能... 查看详情

php命令空间namespace及use的用法实践总结(代码片段)

看PHP中的命名空间和usenamespaceappadminmodel;usethinkModel;usethinkDb;综上可以看出,命名空间就是相当于一个文件夹的路径。同一个命名空间下,不能有相同的类文件。同名的类文件可以存在于不同的命名空间下面。用了命名空间,可以... 查看详情

05—k8s操作之命名空间namespace(代码片段)

k8s操作命令###环境准备:关闭防火墙和安全机制,还有Iptables规则服务systemctlstopfirewalldsystemctldisablefirewalldsystemctlstopiptablessystemctldisableiptablessetenforce0sed-i 查看详情