我正在尝试使用该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);
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译和工作,输出是1.5,我期待编译器出错,因为我有一个const方法试图修改参数的值.
我在这里缺少什么?我如何设计不会修改参数值的方法?
您声明的方法不是const.它返回一个const void(不管是什么),但它const本身不是一个方法.
如果它被宣布
void modify(float& dummy) const
Run Code Online (Sandbox Code Playgroud)
它将是一个const方法,但它仍然可以修改参数的值,因为允许const方法执行此操作.唯一不允许做的是修改它所属类的成员的值.
请注意,为了声明const方法,我不得不删除static规范.一个static方法永远不可能const的,因为静态方法不能修改任何成员反正.
如果要阻止函数修改其参数,则必须使参数为const:
static void modify(const float& dummy)
Run Code Online (Sandbox Code Playgroud)为了说明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
}
};
Run Code Online (Sandbox Code Playgroud)
如您所见,它无法修改成员,但可以修改其参数的值.如果你想防止这种情况,你需要提出这个论点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
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |