const静态方法修改值
Const static method modifies values
我正在尝试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方法。
我在这里缺少什么?我如何设计不会修改参数值的方法?
-
您声明的方法不是
const
。它返回const void
(无论是什么),但不是const
-Method本身。 -
如果被声明为
void modify(float& dummy) const
它将是一个const方法,但随后仍然可以修改参数的值,因为允许const方法执行此操作。它唯一不允许做的就是修改其属于的类成员的值。
-
请注意,要声明
const
方法,我必须删除static
规范。static
方法永远不可能是const
,因为静态方法无论如何都无法修改任何成员。 -
如果要防止函数修改其参数,则必须使参数const:
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
}
};
您在这种情况下误解了'const'的作用及其运作方式。
首先,在C 静态成员函数中不能为const。您显示的功能返回一种" const void"类型(这是否有意义以及编译器是否应该警告是另一个主题)。
第二个参数中的第二个不是const。如果"修改"不是静态函数,并且在该功能上具有" const"修饰符,则假人仍然可以修改:
void modify_nonstatic(float &dummy) const
{
dummy = 1.5f; // perfectly fine - dummy isn't a member of
// the class and can be modified
}
如果您希望参数为const,请制作参数const:
static void modify(const float &dummy)
{
dummy = 1.5f; // fail! you can't modify a const.
}
void modify_nonstatic(const float &dummy)
{
dummy = 1.5f; // fail! you can't modify a const.
}
相关文章:
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 如何通过命名空间调用非静态方法
- 如何在没有实例的情况下获取非静态方法的类型?
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- C++ 将静态方法转换为简单方法
- 从另一个标头中的标头调用静态方法
- C++中静态方法的局部变量范围
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 从部分专用模板方法调用模板非静态方法
- 如何使用 c++ 在 cocos2dx 中定义非静态方法
- 使用 CMake 的静态方法链接错误
- 在子类上调用模板化静态方法时获取类的类型名
- 仅具有公共静态方法的帮助程序类
- 调用没有主体的未实现静态方法
- const静态方法修改值