在C ++中,运算符::
用于访问名称空间或类中的类,函数和变量。
如果使用语言规范.
代替::
访问对象的实例变量/方法时那样,而不是在那种情况下,那么是否会引起可能不存在的歧义::
?
鉴于C ++不允许变量名也是类型名,因此我认为这种情况不会发生。
澄清:我不是问为什么::
选择了.
,即使它也可以工作?
由于想使C ++与现有C代码最兼容(允许对象名称和struct标记之间发生名称冲突),因此C ++允许类名称与对象名称之间发生名称冲突。
意思就是:
struct data {
static int member;
};
struct data2 {
int member;
};
void f(data2& data) {
data.member = data::member;
}
是合法代码。
因此标题中的问题的答案是“是”,不是吗?
@EnricoMariaDeAngelis并不是那么简单。如果将C ++开发为一种全新的语言(例如Java或C#),则可能可以避免歧义。但是C ++被开发为“带有类的C”,这就是为什么它不是这样的原因。“是的,这将是一个正确的答案,但是对于另一个问题。”
等等,赋值行是否只是表明在两个相同的“单词”之间放置
.
或::
具有不同的效果(data.member
指member
的data
是class 的objectdata2
,而data::member
指member
的是class的data
)?是的,但这不是语言设计师应该为之骄傲的东西。这只是兼容性决定的产物。
好的,我知道C ++的今天以及到目前为止的情况(也)取决于C ++从中开发C时的情况。但是谈论C ++的现状,并抛开其现状的说法,如果将所有内容
::
都更改为,就会产生歧义.
。在某种程度上,您已经回答是。我根本无法破坏您的第一句话。也许我的水平使该评论对我来说似乎烟熏。