c++术语消歧

C++ terminology disambiguation

本文关键字:术语 c++      更新时间:2023-10-16

我见过在上下文中使用qualified cv-qualifiers:

非限定类型可以隐式转换为const

但是我也看到过限定的用来表示任何嵌套类型:

MyClass: MyNestedType x;


语言标准中的其他同音术语是什么?

关于限定的两种含义的说明,见下文…

好了,在看到真正想问的问题之后:

  • const, mutable (for functions)
  • 删除
    • 用于销毁+释放动态分配的对象
    • 禁止自动生成特殊类成员)
  • 汽车
    • c++11中的'推断类型'说明符
  • 虚拟
    • 用于虚成员函数
    • 用于虚拟基类
  • 使用
    • 用于定义命名空间别名(sic)
    • 用于导入命名空间
    • 用于将限定名称导入到当前命名空间
      • 注意,并不是表示导入的名称将被使用;这仅仅意味着当开始重载解析时,编译器会意识到导入的声明。这可能导致SFINAE启动并从另一个名称空间选择完全不同的重载/专门化。困惑 !
    • 用于从基类导入名称到派生类(以防止隐藏假名称)
  • 语法傻瓜:

    • &reference type的地址(有争议-不是很混乱)
    • []用于数组索引或lambda声明
    • >>用于右移或关闭嵌套模板定义

      pop-quiz: what is this: 
          template <size_t> struct X {};
          std::vector<X<3>> a; // valid? invalid?
      
    • most vexing parse:

          std::istream_iterator<int> first(std::cin); // declares a variable
          std::istream_iterator<int> last();          // declares a function
      

    等。


    资质含义

    (原始响应)

    第一个是'const/volatile'限定

    变量/函数/形参声明包含类型。该类型可以是'const'或'volatile',可以修改该类型的语义。

    第二个是命名空间限定

    c++可以将名称分组到名称空间中,以避免冲突。非限定名称足以引用在当前或可见名称空间中声明的标识符:

    namespace ns1
    {
        struct X {};
        X f();
    }
    using namespace ns1;
    X f2();
    

    然而

    • 指向当前/可见命名空间之外的名称
    • 消除多个命名空间中相互冲突的可见声明的歧义

    你必须使用所谓的"限定"名称:

    struct X {} ;
    namespace ns2
    {
        struct X {};
        ns2::X f();
        ns1::X g();
    }
    X h(); // uses ::X
    using namespace ns2;
    ::X i();    // disambiguate
    ns2::X i();