初學者 (轉)

amyz發表於2007-10-31
初學者 (轉)[@more@]

今天在讀《Thinking in C++》時發現一個以前使用C++中const的一個當時是在讀《Essential C++》中的一個示例時出現的問題的原因,在類中定義一個常量,使用VC無論如何也編譯不過去。

例如:

#include
using namespace std;

void main()
{
 const int i = 56 ;

 cout<}

但是我們不能在類中定義常量,有兩種情況:
1、

#include
using namespace std;

class CTemp
{
public:
 const int i = 1 ;
};

void main()
{
 const int i = 56 ;

 cout<}
錯誤提示如下:
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'i' : pure specifier can only be specified for functions

2、根據第一個錯誤,我們把i值設為0

#include
using namespace std;

class CTemp
{
public:
 const int i = 0 ;
};

void main()
{
 const int i = 56 ;

 cout<}
錯誤提示如下:
error C2252: 'i' : pure specifier can only be specified for functions

MSDN提示錯誤C2252如下:'ntifier' : pure specifier can only be specified for functions

《C++思想》解釋如下:因為在類裡進行了空間分配,不能知道const的內容是什麼,所以不能把它用做編譯期間的常量。  這意味著對於類裡的常數來說,const就像它在C中一樣沒有作用。
在結構體中與在類中相同:

#include
using namespace std;

struct Temp
{
 const int i = 0 ;
}tem;

void main()
{
 const int i = 56 ;

 cout<}

解決辦法是使用不帶例項的無標記的列舉(enum),因為列舉的所有值必須在便宜時建立,它對類來說是區域性的,但常數表示式能得到它的值
#include
using namespace std;

class CTemp
{
private:
 enum{i = 0 };
};
void main()
{
 const int i = 56 ;

 cout<}
一切OK


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-979882/,如需轉載,請註明出處,否則將追究法律責任。

相關文章