微软C++语言参考资料

8
每当有问题需要参考文本时,我从来没有看到人们引用MSDN C++ 语言参考
我在浏览它时个人感觉它写得非常好。
是否由于它包含一些 VC++ 特定功能而不像标准那样经常被使用呢?

1
这不是一个关闭投票,而是一个迁移到元社区的投票。 - Billy ONeal
1
@Hans Passant:我不同意。直到G++(实际上是MinGW)能够在Windows上有效地支持Unicode,大多数Windows程序员将继续避免使用它。考虑到Windows占据了90%以上的消费应用市场,假设G++可能不是这里的原因。G++是Unix及其朋友的优秀编译器,但在实现Unicode之前,我不会考虑在Windows上使用它。 - Billy ONeal
4
为什么人们要投票将这个问题移动到元社区?这是一个关于C++和该语言参考文献的问题。 - jalf
2
@Billy:不是的。在SO上这样做是因为C++的原因,而不是因为SO的政策原因。我能理解一个不了解问题的人可能会认为它与SO政策有关,因此应该放在meta上讨论。但问题(以及正确的答案)与C++有关,与其他任何事情都无关。他提出问题的原因只是在SO上做出的观察。 - jalf
2
@Billy:就其所写而言,这是一个关于为什么SO上的人们更喜欢一种参考资料而不是另一种的问题。但他并不是在问SO的政策,而是因为他在SO上观察到了这种现象。如果他说他注意到在gamedev.net上,人们倾向于参考ISO标准而不是MSDN,那么你会说这是一个关于游戏编程而不是C++的问题吗?当然不会。他在问为什么SO上的C++专家会以特定的方式回答C++问题。答案基于C++,没有其他东西。这是一个关于C++的问题,没有其他东西。 - jalf
显示剩余6条评论
6个回答

8
我认为这是因为我们引用参考文献的人会直接引用实际的标准本身。

尽管实际标准没有上线,但当前和下一个标准的草案已经出来了。 - mmmmmm
4
如需获得关于C++的权威信息,请参考ISO 14882:2003标准。MSDN可能可靠,也可能不可靠,但它并非权威来源。 - Derrick Turk
@Derrick Turk:这个 ISO 14882:2003 C++ 标准并不是免费的!我没想到会这样。 - Lazer
2
@eSKay: 是的。虽然价格相当便宜,我想是从ANSI购买的18美元(或30美元,记不清了,我的是通过工作获得的)。顺便说一下,草案可以免费从open-std.org获取,而在采用“03标准”之前的草案应该非常接近最终版本。 - Derrick Turk
各种标准文档链接:https://dev59.com/wnVD5IYBdhLWcg3wHnyd#83763 - Michael Burr

4
答案相当简单:MSDN参考资料并不具有权威性。它告诉你微软的编译器如何运作,是的,它通常与标准所说的一致。但是,当有人问C++语言如何处理某种情况时,只有一个文本具有任何权威性:ISO标准。
因此,在回答关于C++的问题时,人们倾向于引用标准。如果您特别询问MSVC如何实现它,那么MSDN将是完全有效的来源。但是大多数问题只是关于C++。
或者换句话说:如果MSDN包含错别字,则MSDN是错误的。如果ISO标准包含错别字,则这就是语言的定义。

2

是因为它包含了一些VC++特有的功能吗?

我认为这是基本原因。例如,它经常包含关于C++/CLI的信息,而不仅仅是C++。

我认为VC++ 2010参考文档在区分哪部分属于C++本身,哪部分属于C++/CLI方面非常谨慎。但是,当涉及到标准时,当然最好参考标准本身。VC++文档也经常参考标准。


2

微软很好地表明了文档中哪些部分是微软特定的,哪些不是,因此我认为微软的参考资料非常好(特别是如果您对微软扩展感兴趣)。

如果我正在寻找“标准”信息,我通常会参考标准文档,因为:

  1. 我有它们(请参阅Where do I find the current C or C++ standard documents?获取相关链接)
  2. 它们是PDF格式,我发现比基于Web或Windows Help的MSDN文档更容易搜索和阅读
  3. 它们是权威的(至少对回答关于标准的问题)

最大的缺点是我还没有电子版本的C90标准..


0
一个有趣的例子:只需看看所有那些__XXX关键词!!(C++标准没有)

@Rooke:嗯...有点困惑。不过页面顶部确实写着“以下划线开头的名称是 Microsoft 的扩展。” - Lazer
2
那是因为标准将它们保留给实现者... (_xyz 和 __xyz) - conio
@conio: _xyz 只在全局命名空间中保留。 - Dennis Zickefoose
1
@Dennis:如果你想要准确(也被称为“吹毛求疵”),它们在全局命名空间和::std命名空间中都是保留的,除非下划线后的第一个字母是大写字母-在这种情况下,它们在任何地方都是保留的(§17.4.3.1.2)。无论如何,Rooke提到了以两个下划线开头的关键字,这些关键字始终在任何地方都是保留的。 - conio
只是为了好玩,可以查看以下 IBM 关键字Sun C++ 文档(您需要在 PDF 中搜索下划线),Intel C++ for Windows 关键字 等等。 - conio

0

C++标准定义了C++语言的工作方式,而Microsoft C++语言参考定义了Microsoft对该语言的实现方式。

因此,如果您想知道独立于编译器保证的行为是什么,那么标准就是您的指南。一些细节和某些边角情况留给了实现定义,每个实现都可以定义语言扩展,因此,如果您想使用那些MSCV特定属性,Microsoft的语言参考应该解释它们。

大多数关于C++的SO问题并没有明确要求MSVC特定的答案,这可能不适用于其他编译器。因此,参考标准提供了一个通用的、与编译器无关的答案,而MS语言参考对于除MSVC以外的其他内容并不重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接