For a struct with const members
struct point { const int x; const int y; };
that is used as member data
You will get a compiler error trying to use memcpy with a const member as follows:
#include
#include
#include
struct foo
{
public:
foo(int init_x);
const int x;
int bar();
};
foo::foo(int init_x): x(init_x) {}
int foo::bar()
{
int *y = (int *) malloc(sizeof(int));
*y = 6;
memcpy(&x, y, sizeof(int));
return x;
}
int main(int argc, char *argv[])
{
foo f{5};
printf("%d\n", f.bar());
}
The above results in
error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
memcpy(&x, y, sizeof(int));
While I used const int in this example, you will find the same result if you instead use a const int pointer member, i.e.
const int *x;
But, if you remove the const descriptor and use:
int x;
(or int *x;, for that matter) the error no longer happens, and the program prints 6, as one might expect.
So this begs the question, if you know something is going to be declared as const:
const yourself?const makes?