相关疑难解决方法(0)

在C++中定义私有到公共

我想定义私有和受保护的公共.

#define private public
#define protected public
Run Code Online (Sandbox Code Playgroud)

这在C++中是安全的吗?

c++

5
推荐指数
2
解决办法
7711
查看次数

如何在GCC下强制'bool'的大小

我目前正在从另一个平台移植一些代码,新平台上的bool是1字节大小的.这会破坏我们的加载代码,因为值存储为32位值.此外,速度是我们平台上的一个关键问题,我们希望使用32位bool,因为处理器本身以32位运行,并且需要额外的操作来比较非32位bool.

有没有办法强制gcc使用32位bool而不是8位bool?

c++ gcc compiler-options

2
推荐指数
1
解决办法
4900
查看次数

访问说明符不是万无一失的?

如果我是这样的一个班级,

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++的问题(宏/访问说明符/什么)?

无论如何,这个主题的重点是:

使用宏,我们很容易违反封装.访问说明符并非万无一失!我对吗?

c++ macros encapsulation access-specifier

2
推荐指数
2
解决办法
781
查看次数

我可以禁用静态断言吗?

static_assert我的代码中散布着一些相当昂贵的电话.虽然它们很有价值,但它们通常非常丰富,并且对编译时间和内存使用有很大贡献.

我可以禁用它们吗?

c++ static-assert

2
推荐指数
1
解决办法
1082
查看次数

在编译的哪个阶段保留标识符?

在这里工作只是一点点好奇心.在处理危险的事情时,我开始考虑各种编译器及其相关标准库的实现.这是我思想的进展:

  1. 某些类标识符保留用于C++和C中的实现.

  2. 编译器必须执行编译阶段(预处理,编译,链接),就好像它们是按顺序执行一样.

  3. C预处理器不知道标识符的保留状态.

  4. 因此,当且仅当以下情况时,程序可以使用保留标识符:

    1. 使用的保留标识符是所有预处理器符号.

    2. 预处理结果不包括保留标识符.

    3. 标识符不与编译器预定义的符号冲突(GNUC等人).

这有效吗?我对第3点和第4.3点不确定.此外,有没有办法测试它?

c c++ compiler-construction reserved-words

1
推荐指数
1
解决办法
760
查看次数

C++ 11重新定义删除而不影响= delete

我正在使用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)

有没有办法重新定义删除而不影响=删除?

备注(版)

重新定义关键字确实需要谨慎处理,并且几乎在任何情况下都可以通过其他设计来避免.我已经充分意识到这一点,我不要求解决方法.将此问题视为研究而非实际生产开发.

这就是说我只想在这里讨论一个问题,即我们在两种不同的情况下有一个关键字有两种不同的含义.

所以问题只是在用作发布操作时定义删除而不是作为"无实现"标记.

c++ c++11

-1
推荐指数
1
解决办法
111
查看次数

c ++/visual studio中的构造函数

我试图用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)

c++ visual-studio

-3
推荐指数
2
解决办法
196
查看次数