const这些声明中的含义是什么?该const混淆了我.
class foobar
{
public:
operator int () const;
const char* foo() const;
};
Run Code Online (Sandbox Code Playgroud) 我正在编写一个包含控制硬件设备的传统C API的类.在一个简化的例子中,我可能有类似的东西:
class device
{
public:
void set_request(int data) { legacy_set_req(p_device, data); }
int get_response() const { return legacy_get_rsp(p_device); }
private:
device_handle_t *const p_device;
};
Run Code Online (Sandbox Code Playgroud)
这个类本身没有按位状态; 因此,我可以选择声明set_request()为const,编译器会对此感到满意.但是,从语义的角度来看,这是否是正确的方法,因为它会影响对象的可观察行为?(即,包封的硬件设备非常确实有状态).
我是CPP的新手,我不知道为什么setValue() const同时它是一个const.
为什么该类允许修改 const public
看起来很奇怪,g ++ -Wall或MS Visual C++没有错误
这是我的代码:
main.cpp中
#include <iostream>
#include <cassert>
#include "DArray.h"
int main(void)
{
DArray darray(1);
darray.setValue(0, 42);
assert(darray.getValue(0) == 42);
darray.~DArray();
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
DArray.h
class DArray
{
private:
int* tab;
public:
DArray();
DArray(unsigned int n);
~DArray();
int& getValue(unsigned int n) const;
void setValue(unsigned int n, int value) const;
};
Run Code Online (Sandbox Code Playgroud)
DArray.cpp
#include "DArray.h"
DArray::DArray()
{
}
DArray::DArray(unsigned int n)
{
tab = new int[n];
}
DArray::~DArray()
{
delete[] tab; …Run Code Online (Sandbox Code Playgroud)