2017-06-16 30 views
-2

是否有可能從C++c + +刪除的標準功能

//Undefine some function from the standard like classes 
class someclass 
{ 
    someclass(){ 
     //Whatever  
    } 
}; 

刪除的標準功能,然後得到錯誤

「類未聲明的標識符」

+2

我在想你爲什麼要這樣做 – CinCout

+0

讓我直截了當地說:你想刪除/禁用標準庫函數嗎?如果是這樣,爲什麼?我想不出有什麼好的理由來做到這一點。 – InternetAussie

+0

@CInCout只是爲了好玩 – Abdision

回答

2

不,我建議,但你可以使用預處理器宏來取消你想要的任何東西。

如果你編譯下面的程序,你會得到很多錯誤。

#define vector 
#include <vector> 

int main() 
{ 
    vector<int> a; 
} 

您不需要文件中的#define vector。您可以在用於調用編譯器的命令中定義它。


注意使用上述伎倆,使你的程序受到不確定的行爲:

the C++11 Standard

17.6.4.3保留名稱

...

2如果程序聲明或定義了一個nam e在保留的上下文中,除本條款明確允許外,其行爲未定義。

17.6.4.3.1宏名稱 [macro.names]

1所述的轉換單元,其包括一個標準庫的頭在任何標準庫頭不得聲明#define#undef名稱。

2所述的翻譯單元不得#define#undef名稱詞法相同的關鍵字,以在表中所列[tab:identifiers.special]標識符,或在[dcl.attr]描述的attribute-tokens

+2

17.6.4.3.1宏名稱§2翻譯單位不得在詞義上與關鍵字相同的「#define」或「#undef」名稱... –