我想定义私有和受保护的公共.
#define private public
#define protected public
Run Code Online (Sandbox Code Playgroud)
这在C++中是安全的吗?
我目前正在从另一个平台移植一些代码,新平台上的bool是1字节大小的.这会破坏我们的加载代码,因为值存储为32位值.此外,速度是我们平台上的一个关键问题,我们希望使用32位bool,因为处理器本身以32位运行,并且需要额外的操作来比较非32位bool.
有没有办法强制gcc使用32位bool而不是8位bool?
如果我是这样的一个班级,
class Sample
{
private:
int X;
};
Run Code Online (Sandbox Code Playgroud)
然后我们无法从外部访问X,所以这是非法的,
Sample s;
s.X = 10; // error - private access
Run Code Online (Sandbox Code Playgroud)
但是我们可以在不编辑课程的情况下访问它!我们需要做的就是这个,
#define private public //note this define!
class Sample
{
private:
int X;
};
//outside code
Sample s;
s.X = 10; //no error!
Run Code Online (Sandbox Code Playgroud)
ideone上的工作代码:http://www.ideone.com/FaGpZ
这意味着,我们可以通过在类定义之前或之前定义这样的宏来更改访问说明符#include <headerfile.h>,
#define public private //make public private
//or
#define protected private //make protected private
//or
#define so on
Run Code Online (Sandbox Code Playgroud)
这不是C++的问题(宏/访问说明符/什么)?
无论如何,这个主题的重点是:
使用宏,我们很容易违反封装.访问说明符并非万无一失!我对吗?
static_assert我的代码中散布着一些相当昂贵的电话.虽然它们很有价值,但它们通常非常丰富,并且对编译时间和内存使用有很大贡献.
我可以禁用它们吗?
在这里工作只是一点点好奇心.在处理危险的事情时,我开始考虑各种编译器及其相关标准库的实现.这是我思想的进展:
某些类标识符保留用于C++和C中的实现.
编译器必须执行编译阶段(预处理,编译,链接),就好像它们是按顺序执行一样.
C预处理器不知道标识符的保留状态.
因此,当且仅当以下情况时,程序可以使用保留标识符:
使用的保留标识符是所有预处理器符号.
预处理结果不包括保留标识符.
标识符不与编译器预定义的符号冲突(GNUC等人).
这有效吗?我对第3点和第4.3点不确定.此外,有没有办法测试它?
我正在使用Visual C++ 2013.
我需要重新定义我的删除关键字(另一个内存管理工具)
#define delete foo(SOME,PARA,METERS), delete
Run Code Online (Sandbox Code Playgroud)
目的是将删除重定向到我的重写版本,但是在使用"= delete"关键字或使用外部代码时我遇到了问题.
Class Something {
public:
Something() {}
Something(const Something &) = delete;
}
Run Code Online (Sandbox Code Playgroud)
注意:VC13给出以下错误:
error C2061: syntax error : identifier 'instance'
error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)
题
有没有办法重新定义删除而不影响=删除?
备注(版)
重新定义关键字确实需要谨慎处理,并且几乎在任何情况下都可以通过其他设计来避免.我已经充分意识到这一点,我不要求解决方法.将此问题视为研究而非实际生产开发.
这就是说我只想在这里讨论一个问题,即我们在两种不同的情况下有一个关键字有两种不同的含义.
所以问题只是在用作发布操作时定义删除而不是作为"无实现"标记.
我试图用Visual Studio在c ++中创建一个构造函数,我得到这个错误:
错误1错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int
我从我的老师那里运行了一个不同的代码,它几乎是一样的,并且有效.我是oop的新手,所以请不要犹豫.
一个例子:
class Stud {
char name[30];
const () {
this->cnp[0] = 'a';
this->cnp[1] = '/0';
}
};
Run Code Online (Sandbox Code Playgroud)