考虑以下代码:
#include <memory.h>
#include <stdlib.h>
void Foo()
{
const char ** caps = malloc( sizeof( char * ) );
memset( caps, 0, sizeof( char * ) );
}
使用gcc 4.9.2-pedantic编译没有问题,但使用默认选项的cl 18(来自VS2013)在memset行上显示“warning C4090:'function':不同的'const'限定符”。
现在caps
是一个指向指向常量字符的指针?因此,指针本身不是常量,因此应该可以将其转换为void*
,但是cl似乎会自动从中生成const void*
,从而生成警告。这是否是正在发生的事情的正确解释?这是非标准行为,对吗?