根据C++标准,字符串文字类型是 array of const char
auto constStr = "aaa";
char* nonConstStr = constStr; //Error here, cannot convert from 'const char *' to 'char *'
char* stillNonConstStr = "aaa"; //Why I don't have error here?
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么在第3行我没有收到错误吗?
Ben*_*ley 14
历史原因.过去允许并且非常常见,从字符串文字分配给a char*
,即使字符串文字的类型是const char数组.我相信它来自于天C
,其中const
不存在,但不可以引用我这句话.它后来被弃用了,但仍然允许这样做以免破坏使用它的代码库.该容差不会扩展到允许char*
从const char*
(也不是来自不是文字的const char数组)初始化,这就是你的第二行失败的原因.在C++ 11中,char*
禁止从字符串文字转换为,但您的编译器可能还没有强制执行.
Rei*_*ica 12
在C++ 03中,有一个特殊规则([conv.array]§2)允许将字符串文字转换为类型char*
.
在C++ 11中,此规则不再存在.换句话说,您的代码是有效的C++ 03,但无效的C++ 11.
归档时间: |
|
查看次数: |
1014 次 |
最近记录: |