use*_*676 95 c++ language-design
在 C++ 中,运算符::用于访问命名空间或类中的类、函数和变量。
如果在访问对象的实例变量/方法时使用的语言规范.而不是::在那些情况下太像,那么这是否会导致可能不存在的歧义::?
鉴于 C++ 不允许变量名也是类型名,我想不出可能发生的情况。
澄清:我不是问为什么::被选中.,只是如果它也可以工作?
Kit*_*it. 125
由于试图使 C++ 与现有的 C 代码大部分兼容(允许对象名称和结构标记之间的名称冲突),C++ 允许类名称和对象名称之间的名称冲突。
意思就是:
struct data {
static int member;
};
struct data2 {
int member;
};
void f(data2& data) {
data.member = data::member;
}
Run Code Online (Sandbox Code Playgroud)
是合法代码。
Ded*_*tor 38
两者都有效但引用不同对象的示例:
#include <iostream>
struct A {
int i;
};
struct B {
int i;
A B;
};
int main() {
B x {0, 1};
std::cout << x.B.i << '\n';
std::cout << x.B::i << '\n';
}
Run Code Online (Sandbox Code Playgroud)
请参阅coliru 直播。
a::b和a.bwhere之间有区别,::意味着a用作命名空间,这意味着它是命名空间或类型名称。如果 C++ 支持非虚拟复数继承,并且变量可以与类型具有相同的名称,这将消除引用错误对象的机会。这是模板元编程所必需的。
另一个例子是B 类上下文中的&B::foovs。&B.foo
| 归档时间: |
|
| 查看次数: |
6237 次 |
| 最近记录: |