相关疑难解决方法(0)

使用'const'作为函数参数

你走多远const?您是否只是const在必要时制作功能,或者您是否全力以赴并在任何地方使用它?例如,想象一个简单的mutator,它接受一个布尔参数:

void SetValue(const bool b) { my_val_ = b; }
Run Code Online (Sandbox Code Playgroud)

const实际上有用吗?我个人选择广泛使用它,包括参数,但在这种情况下,我想知道它是否值得?

我还惊讶地发现你可以省略const函数声明中的参数,但可以将它包含在函数定义中,例如:

.h文件

void func(int n, long l);
Run Code Online (Sandbox Code Playgroud)

.cpp文件

void func(const int n, const long l)
Run Code Online (Sandbox Code Playgroud)

是否有一个原因?这对我来说似乎有点不寻常.

c++ const

368
推荐指数
15
解决办法
24万
查看次数

当函数接受对象的引用(并访问非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万
查看次数

f(int const) 是否比 f(int) 更适合编译器优化?

考虑以下两个函数:

void f(int n);

void f(int const n);
Run Code Online (Sandbox Code Playgroud)

从编译器优化的角度来看,后者似乎比前者更好。

然而,从调用者的角度来看,比 .int const n拥有更多的无用信息更多的精神负担int n

哪个是更好的做法?

c++ optimization performance constants compiler-optimization

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