百姓大小事,一呼百应!

百姓网 | 百姓知道

硬件

「只要是微软的 C++,都是不标准的,而且 IDE 庞大,C++ 11 的特性都没支持全」是真的吗?

刚开始学,用的VC,有人如上说,推荐我用CodeBlocks。。。求知道为啥不标准?

2 个回答

  • 叛逆者 | 2017-07-18 14:26:08

    你要的是提升自己的编程兴趣而不是在意工具这个细节,不要相信那些人说的用IDE你就不链接和预编译的过程,只要你有心就可以去学和了解,最后用@vczh的话结束,逗逼的程序员秀工具,优秀的程序员秀的是代码,大概就是这样

    本问答由叛逆者提供

  • 叛逆者 | 2017-07-18 13:57:52

    我必须前排说一下。Cl 对于 C++ 标准支持本来就是最烂。Visual Studio 2015 修复了 750 个 Bug。750个,由此可见 2013。2013 的时候居然连类内成员初始化都是有Bug的,只能靠弄一个 Error,呵呵呵呵。。。
    不符合标准就是不符合标准。Cl 不支持 C++ 98 的 Two-phase lookup,那一套 ATL的代码都是不符合标准的,还得 Clang 用一些 hack 让它们编译过,呵呵呵。Cl 不支持 Expression SFINAE(目前对 Expression SFINAE 的支持为 Partial):导致各种开源代码编译不过(一位大神实现的 intrusive_ptr,根本在 Cl 上编译不过。lhmouse/intrusive_ptr · GitHub,更不用提帝球的YSLib了。)
    那 Minimal Support for GC。。。我来给大家看一下 VC++ 的实现:
    inline void declare_reachable(void *) { // increment pointer reachable count } template<class _Ty> inline _Ty *undeclare_reachable(_Ty *_Ptr) { // decrement pointer reachable count return (_Ptr); } inline void declare_no_pointers(char *, size_t) { // declare region to be pointer free } inline void undeclare_no_pointers(char *, size_t) { // undeclare region to be pointer free } inline _Pointer_safety get_pointer_safety() _NOEXCEPT { // get pointer safety status return (pointer_safety::relaxed); }
    全都是 No-op 好吧(当然,标准说 No-op 是合法的)。这。。。各位自己看。
    而且,Cl 到现在还不支持 Extended constexpr(C++ 14),又导致一票标准库不符合标准。可能又要有人说没用了?.......
    这当然不是全部:
    Nonstandard Behavior
    再补一刀吧,The C++ Programming Language 4th Edition中的一段代码:
    void f() { char* p = "Plato"; // error, but accepted in pre-C++11-standard code p[4] = 'e'; // error: assignment to const }
    然而 Cl 在/W3下无警告接受 char* p = "Plato"。(Update:有聚聚指出使用 /Zc:StrictString 可报 Error)
    用 Cl 写 C++ 非常痛苦的——你写了一段模板,在 Clang/MinGW 下都编译得那么顺利,而到了 Cl,就要想出各种Workaround了。

    本问答由叛逆者提供

* 本站部分内容来源自网络,仅作分享之用,侵删。