检查这是否正确

时间:2011-03-23 06:26:09

标签: c++ c++11

形成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到这个声明吗?(该声明含义代表什么)

最后..解释任何其他事情..我离开了吗?

2 个答案:

答案 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();

不是。