gpt4 book ai didi

c++ - Const 静态方法修改值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:59 25 4
gpt4 key购买 nike

我正在试验 const 关键字并试图从中获得有用的方法。

#include <iostream>

class A
{
public:
static const void modify(float& dummy)
{
dummy = 1.5f;
}
};

int main(int argc, char* argv[])
{
auto a = 49.5f;

A::modify(a);

std::cout << a << std::endl;

return(0);
}

此代码编译并运行,输出为 1.5,我原以为编译器会出错,因为我有一个 const 方法试图修改参数的值。

我在这里缺少什么?我如何设计不会修改参数值的方法?

最佳答案

  1. 您声明的方法不是const。它返回一个 const void(不管是什么),但它本身不是一个 const 方法。

  2. 如果声明了

    void modify(float& dummy) const

    这将是一个 const 方法,但它仍然可以修改参数的值,因为允许 const 方法执行此操作。唯一不允许它做的是修改它所属类的成员的值。

  3. 请注意,为了声明一个const 方法,我必须删除static 规范。 static 方法永远不能是 const,因为静态方法无论如何都不能修改任何成员。

  4. 如果你想阻止函数修改它的参数,你必须使参数为常量:

    static void modify(const float& dummy)

为了说明 const 方法可以做什么和不能做什么,下面是一个具有成员和 const 函数的类:

class A
{
float my_member;
public:
void modify(float& dummy) const
{
my_member = dummy; // attempt to modify member -> illegal
dummy = 1.5f; // modifies a non-const argument -> ok
}
};

如您所见,它不能修改成员,但可以修改其参数的值。如果你想防止这种情况发生,你需要使参数 const:

class A
{
float my_member;
public:
void modify(const float& dummy) const
{
my_member = dummy; // attempt to modify member -> illegal
dummy = 1.5f; // attempt to modify a const reference -> illegal
}
};

关于c++ - Const 静态方法修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13302921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com