热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

g++和g++14的未初始化值的差异

如果我使用c++编译并运行一个简单程序,如下所示:intmain(){intx;cout<&l

如果我使用c ++编译并运行一个简单程序,如下所示:

int main(){
int x;
cout <}

然后我在Linux上编译说g ++ myProgram.cc(或g ++ -std = c ++ 14),显然得到了./a.out可执行文件,该可执行文件运行良好,并且自动初始化的值为0。

但是,如果我使用g ++ 14 myProgram.cc编译代码,则会收到一条错误消息,提示x未初始化。

g ++ 14是某种不同的版本吗?我很困惑为什么会这样,谢谢!



来自C ++参考的initialization部分(对所有版本均有效)。您可以推断,声明时局部非静态原始类型变量不会自动初始化为众所周知的值/状态,您必须显式地进行操作。请注意,尽管未初始化,但它们确实包含一个值,但它不是确定性的,可以是任何值,因此,显式初始化的(至为重要)重要性。因此,确保变量的已知状态和定义状态。您的代码实际上表现出所谓的未定义行为,因为它使用具有未知值和未定义值/状态的变量。

这对所有版本的C ++有效。因此:


  • 您的编译器可能存在错误,不太可能发生像初始化规则这样简单的错误。


  • 这可能是编译器的特定于实现的细节。


  • 该命令可能正在调用其他


作为一种好的做法,这将使您免于将来遇到许多错误,在使用变量之前,请务必尽早初始化变量

,

  

打印出自动初始化的值0。

不, 一千次,不:-)

自动变量不是 隐式初始化的(a)。特定的实现可以将它们初始化为特定的值,但这不是标准要求或保证的。

针对您问题的解决方案明确对其进行初始化(或在尝试使用它之前分配给它)。

换句话说,使用:

int x = 0;


(a)带有构造函数的类或结构显然已初始化,但是这里不是这种情况,因为您使用的是简单的int类型。

,

g ++ -std = c ++ 14 g ++ 14

gcc在某些地方很奇怪:

From another post about GCC

没有“正式的GCC定义”,只有官方的英语定义。

这段文字意味着,在GCC之前在发布C ++ 14之前就实施了即将发布的C ++ 14功能的实验原型的地方,将来的版本将不会费心尝试保持与这些实验的向后兼容性。

两个版本之间的向后兼容性仅针对国际标准中包含的功能进行维护。

这是因为在标准发布之前,新C ++功能的规范可能会发生巨大变化。保证早期支持它们的实验将与最终发布在标准中的最终真实功能向前兼容是很疯狂的。

简而言之:使用实验性功能需要您自担风险,并且不要期望它们在下一版GCC中的工作方式相同。


推荐阅读
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • linux 字符串数组初始化,C++字符数组初始化方法的分析
    发现了一个字符数组初始化的误区,而这个往往能导致比较严重的性能问题,分析介绍如下:往往我们在初始化一个字符数组,大概有如下几 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
  • golang源码分析调度概述
    golang源码分析-调度过程概述本文主要概述一下golang的调度器的大概工作的流程,众所周知golang是基于用户态的协程的调度来完成多任务的执行。在Linux ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 第三周读书笔记《程序员的自我修养》  计划对这本书是精读,这周读了3,4章。第三章目标文件里有什么  首先介绍了目标文件的格式,Windows下是pe-coff, ... [详细]
author-avatar
手机用户2502939987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有