2017-06-16 77 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”名称... –