相关疑难解决方法(0)

为什么从字符串常量到'char*'的转换在C中有效,但在C++中无效

C++ 11标准(ISO/IEC 14882:2011)在§ C.1.1:

char* p = "abc"; // valid in C, invalid in C++
Run Code Online (Sandbox Code Playgroud)

对于C++来说,没关系,因为指向String Literal的指针是有害的,因为任何修改它的尝试都会导致崩溃.但为什么它在C中有效?

C++ 11还说:

char* p = (char*)"abc"; // OK: cast added
Run Code Online (Sandbox Code Playgroud)

这意味着如果将强制转换添加到第一个语句,它将变为有效.

为什么转换使第二个语句在C++中有效?它与第一个语句有什么不同?它不是仍然有害吗?如果是这样的话,为什么标准说它没关系?

c c++ string char c++11

137
推荐指数
4
解决办法
12万
查看次数

如何在我的C++程序中获取和使用头文件<graphics.h>?

我一直在寻找头文件及其相关库的源代码,以便将它与我的C++程序集成.

同时,我对那些适用于多个编译器的跨平台库感兴趣.为了更明确,我在谈论那些用于在C++中绘制形状,线条和曲线的库.

c++ graphics

14
推荐指数
3
解决办法
10万
查看次数

当函数接受对象的引用(并访问非const方法)时,如何抛弃const'ness?

我有一个备份的数据副本,我想保护,所以我做了const.我需要const在两个场合违反这个问题,一次将原始数据存储到它:

fgBlocks.CopyInto((BlkArray&)backUpCopy);
Run Code Online (Sandbox Code Playgroud)

WRT

result CopyInto(BlkArray &replica) const {/**/}
Run Code Online (Sandbox Code Playgroud)

当我调用RemoveAll()它时,这是一个非const方法:

((BlkArray)backUpCopy).RemoveAll(true);
Run Code Online (Sandbox Code Playgroud)

第一个演员(如上所示(BlkArray&))是否正确?这是间接的一个方面,我现在还没有.然后,我将再添加一个未使用的方面,即抛弃const用于调用对象方法的方法,编译器不接受如上所示的方法.

成员声明如下:

BlkArray fgBlocks;
const BlkArray backUpCopy;
Run Code Online (Sandbox Code Playgroud)

我正在尝试扩展Correa的解决方案,所以:

    BlkArray *pBUCopy = (BlkArray *)&backUpCopy;
    fgBlocks.CopyInto(*pBUCopy);
Run Code Online (Sandbox Code Playgroud)

现在唯一的问题是编译器由于失败而失败

未初始化的成员'MyClass :: backUpCopy'与'const'类型'const BlockArray'

c++ casting const

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

标签 统计

c++ ×3

c ×1

c++11 ×1

casting ×1

char ×1

const ×1

graphics ×1

string ×1