我在互联网上看到了关于C ++ / CLI是否是C ++超集的矛盾答案。
接受的答案on this question声称“技术上没有”,但没有提供符合ISO C ++的非C ++ / CLI代码示例。关于这个问题的另一个答案引用了一本相反的书。
那么,您能否提供准确的答案示例代码在C ++ / CLI上失败或引用可信来源(例如MSDN)?
我今天有人提出这个话题,并且我想告诉自己,但我没有在其他地方找到任何明确的答案!
答案 0 :(得分:9)
有效的C ++,无效的C ++ / CLI:
int main()
{
int gcnew = 42;
}
gcnew
,generic
和nullptr
都是C ++ / CLI中的保留字;当然,nullptr
在C ++ 0x中并不是真正的问题。 Herb Sutter在2003年发表了关于C++/CLI keywords: Under the hood的博客。
对于它的价值,当我在处理大型混合代码库(包括C ++和C ++ / CLI)时,我从未遇到过像这样的语法问题或琐碎的问题。 C ++ / CLI的巨大问题(当然,我认为)是本机代码和托管代码具有完全不同的资源管理范例,在编写混合代码时要忘记某些事情需要哪种范例,这非常容易。我修复了许多错误,这些错误是由于假设托管资源被确定性销毁或者垃圾收集器清理了本机资源。
答案 1 :(得分:2)
我想知道过多的超级/扩展辩论。 C ++ / CLI是一种新语言,旨在充当ISO C ++和ISO CLI之间的绑定。我衷心建议您阅读C++/CLI Design Rationale 这清楚地说明了文件一开始的设计目标:
C ++ / CLI的使命是直接提供 访问C ++程序员使用 现有的CLI库并创建新的 一些,很少或没有表现 开销,最低金额 额外的表示法,以及完整的ISO C ++ 兼容性。