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中,则声明的初始声明符列表不得为空。”