根据c ++语法,const int* const p
意味着p指向它并且它的值不能被重写.但是今天我发现如果我这样编码:
void f(const int* const p) { char* ch = (char*) p; int* q = (int*) ch; (*q) = 3; //I can modify the integer that p points to }
在这种情况下,关键字"const"将失去它的效果.使用"const"有什么意义吗?
你在const
这里抛弃了这个问题:
char* ch = (char*) p;
实际上,你说"我知道我在做什么,忘了你const
,我接受后果." C++允许你做这样的事情,因为有时它可能是有用/必要的.但它充满了危险.
请注意,如果传递给函数的参数确实存在const
,那么您的代码将导致未定义的行为(UB).你无法从函数内部知道.
另请注意,在C++中,最好使您的意图清晰,
int* pi = const_cast<int*>(p);
这清楚表明你的意图是抛弃了const
.它也更容易搜索.关于危险和UB的相同警告适用.