形成ISO标准草案
n3234说:
Two names are the same if
— they are identifier s composed of the same character sequence, or
根据这个含义。检查这是否正确
class ABC{};
class abc{};
int ABC(){}
int abc(){}
int main(){
int abc;
char ABC;
}
根据上述说法,这个程序是否正确?
这个程序是APT到这个声明吗?(该声明含义代表什么)
最后..解释任何其他事情..我离开了吗?
答案 0 :(得分:3)
来自ISO / IEC 14882:2003(E)9.1.2 -
类定义将类名引入定义它的范围,并在封闭范围内隐藏该名称的任何类,对象,函数或其他声明(3.3)。如果在声明了同名对象,函数或枚举器的作用域中声明了类名,那么当两个声明都在作用域中时,只能使用详细类型说明符引用该类( 3.4.4)。
[实施例:
struct stat {
// ...
};
stat gstat; // use plain stat to
// define variable
int stat(struct stat*); // redeclare stat as function
void f() {
struct stat* ps; stat(ps); // struct prefix needed
// to name struct stat
// ...
}
-end example]
3.3.7名称隐藏
2类名(9.1)或枚举名(7.2)可以通过在同一范围内声明的对象,函数或枚举的名称隐藏。如果类或枚举名称以及对象,函数或枚举器在同一作用域(按任何顺序)中声明具有相同名称,则在对象,函数或枚举器名称可见的任何位置都隐藏类或枚举名称。 / p>
根据标准的引用,所有这些陈述都是正确的。
class ABC{};
class abc{}; // abc and ABC are two different character sequences for the
// class entity. And similar is the case for next two function
// entities.
int ABC(){}
int abc(){}
int main(){
int abc; // abc and ABC are two different character sequences.
char ABC;
}
最后..解释任何其他事情..我离开了吗?
两个函数ABC(), abc()
都应该返回int
,但他们没有这样做:)
答案 1 :(得分:2)
C ++承认上下案例,所以是的,上面的内容确实符合。
ABC和abc之间存在差异 - 它们是完全不同的标识符。 但是,不鼓励使用这种区别在现实世界中制作唯一标识符,因为它实际上保证你会在某些时候将它们混合起来。
请注意,
int abc();
int abc();
是非法的,但
int abc();
int ABC();
不是。