Pat*_*ick 7 c++ const visual-studio visual-c++ delete-operator
我从http://support.microsoft.com/kb/131322获得了以下测试代码:
const int * pi = new int(1000);
const char * pch = new char(65);
void main(void)
{
delete pi ;// Error C2710:cannot delete a pointer to a const object
delete pch ;// Error C2710:cannot delete a pointer to a const object
}
Run Code Online (Sandbox Code Playgroud)
在那个页面上,微软声称不允许删除指向const的指针,这对我来说似乎是合乎逻辑的.你不希望你给指针指向const的函数删除你背后的实例.
奇怪的是,问题删除指向const(T const*)的指针表明它是允许的,它甚至是有意义的.
事实上,如果我使用Visual Studio 2010从MSDN页面编译代码,它会正确编译(甚至在使用/ W4编译时没有警告).
关于删除指针到const的行为过去是否在C++标准中发生了变化?或者Visual Studio中是否更改了?
Che*_*Alf 12
你确实delete可以指向指针const.
如果Visual C++对符合标准的程序另有说明,那么这就是编译器错误,应该报告.
但是,你的(或微软?)程序不是标准的C++,因为你有void结果类型main.
您链接到的知识库文章说"根据定义不应该允许删除指向常量的指针(ARM部分5.3.4)",尽管它是错误的,但它提供的引用是正确的.ARM部分5.3.4说"无法删除指向常量的指针".然而,ARM于1990年出版......
大约十年后,在1998年,C++被标准化了,在标准C++中你可以删除一个指针const.这在规范性文本中没有规定; 它是通过省略限制来指定的.但是,C++ 98标准§5.3.5/ 2具有以下非规范性注释:
指向
const类型的指针可以是delete-expression的操作数; 在将指针表达式用作delete-expression的操作数之前,不必丢弃指针表达式的constness(5.2.11).
在ARM标准化之后的20多年后,我们现在已经过去十多年了.
您使用的是哪个版本的Visual C++?
干杯&hth.,
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |