Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是;“常量类”;什么意思?_C++_Class_Constants - Fatal编程技术网

C++ 什么是;“常量类”;什么意思?

C++ 什么是;“常量类”;什么意思?,c++,class,constants,C++,Class,Constants,经过一些查找和替换重构后,我最终得到了这个宝石: const class A { }; “const class”是什么意思?它似乎可以编译。如果您有: const class A { } a; 那么它显然意味着“a”是常量。否则,我认为它很可能是无效的C++。 “const class”是什么意思?看起来还可以 对我来说不是。我认为你的编译器只是出于礼貌而忽略了它 编辑:是的,VC++默默地忽略常量,GCC抱怨。在该示例中,常量没有意义,您的编译器应该给您一个错误,但是如果您使用它来声明该

经过一些查找和替换重构后,我最终得到了这个宝石:

const class A
{
};
“const class”是什么意思?它似乎可以编译。

如果您有:

const class A
{
} a;
那么它显然意味着“a”是常量。否则,我认为它很可能是无效的C++。 “const class”是什么意思?看起来还可以

对我来说不是。我认为你的编译器只是出于礼貌而忽略了它


编辑:是的,VC++默默地忽略常量,GCC抱怨。

在该示例中,
常量
没有意义,您的编译器应该给您一个错误,但是如果您使用它来声明该类在结束
}
之间的变量,然后将这些实例定义为
const
,例如:


const class A
{
public:
    int x, y;
}  anInstance = {3, 4};

// The above is equivalent to:
const A anInstance = {3, 4};

除非随后声明该类的实例,否则它没有意义,例如下面的示例:

const // It is a const object...
class nullptr_t 
{
  public:
    template<class T>
      operator T*() const // convertible to any type of null non-member pointer...
    { return 0; }

    template<class C, class T>
    operator T C::*() const   // or any type of null member pointer...
    { return 0; }

  private:
    void operator&() const;  // Can't take address of nullptr

} nullptr = {};
const//它是一个const对象。。。
类nullptr\t
{
公众:
模板
运算符T*()常量//可转换为任何类型的空非成员指针。。。
{返回0;}
模板
运算符tc::*()常量//或任何类型的空成员指针。。。
{返回0;}
私人:
void运算符(&()const;//无法获取nullptr的地址
}nullptr={};

如果您正在等待C++0x,则执行一个临时的
nullptr
实现。

尝试使用GCC编译它,它将给您以下错误:
错误:只能为对象和函数指定限定符。

从错误中可以看出,只有对象(变量、指针、类对象等)和函数可以是常量。因此,尝试将对象设置为常量,这样它就可以很好地编译。
const类A{}

常数A

我要说的是,它看起来像是一个边缘案例,VC++正在出错;“const”并不影响我能找到的任何东西。VC++消化了很多格式错误的代码(我现在使用的是2013)。看来他们只是为了快乐的路径测试,忘记了C++的优秀特性。我确实记得很久以前你在C中做过类似的事情。我找不到任何理由来证明这是一个错误。编译器可能会随意发出警告,但只有标准才能确定什么是错误。因为您将某些内容声明为const而不是。这是你永远不想做的事情,因此应该是一个错误。标准应确定什么是正确的;定义每一个错误的东西都是太多的工作了。我认为标准中使用的术语是“错误的”。标准没有说什么是不允许的,只有什么是允许的。这不是有效的C++语法,因此不允许。这是一个错误,因为只有当有声明符时,存储类说明符才适用,在这个例子中没有声明器。7.1.5.1/1:“有两个cv限定符,const和volatile。如果cv限定符出现在decl说明符seq中,则声明的初始声明符列表不得为空。”