c++术语消歧
C++ terminology disambiguation
我见过在上下文中使用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();
相关文章:
- 临时对象:术语澄清
- std::bind 和 std::函数术语不值为接受 0 个参数?
- 我想在C++代码中比较这三个术语
- 理解一个特定的C++代码块及其术语
- 术语的计算结果不是采用0个参数的函数
- 错误 C2064:术语的计算结果不是采用 3 个参数的函数
- C++,术语,非规范,阻塞,检测消息结束
- 具有成员的类的术语
- 术语不计算为函数采用 1 个参数错误?
- 将用户输入的术语与 txt 文件中的列表进行比较
- "overriding"非虚拟方法的官方术语
- 超载 =具有多个术语的运算符
- C++:术语的计算结果不是采用 1 个参数的函数
- Visual Studio,找不到初始化术语,无法再调试
- 无法将术语添加到列出的列表类中
- C2064:术语未评估为1个参数qtConcurrent :: map的函数
- 术语差异的模型
- 为什么在提到 prvalue 时,它在这里使用术语"object"?
- 提升线程:术语的计算结果不为 0 个参数
- 了解模板元编程概念和术语