问题标签 [gcc4.9]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 允许 std::vector 的 g++4.9 错误
考虑以下代码:
我刚刚从@juanchopanza https://stackoverflow.com/a/25108679/3093378发现这段代码不应该是合法的,因为普通的旧式C
数组是不可分配/可复制/可移动的。但是g++
,即使使用-Wall -Wextra -pedantic
. clang++
不编译它。当然,如果我尝试做类似的事情auto arr1 = arr;
,它会失败g++
,因为它不知道如何复制arr
到arr1
.
我在 OS X Mavericks 下使用g++4.9
过。macports
现场代码:http: //goo.gl/97koLa
我的问题是:
- 根据标准,此代码是否非法?
g++
这么牛逼吗?我一直在寻找很多简单的例子,其中g++
盲目地编译非法代码,最后是昨天 用户定义的转换运算符优先级,在 g++ 但不是 clang++ 编译,并且没有太多努力,只是C++
为了好玩而尝试。
c++11 - 如何在 Debian Wheezy armel 上安装 g++ 4.9?
我的 Debian 7 armel 嵌入式系统目前有 g++ 4.6,我想升级到 g++ 4.9 以使用新的 C++11 功能。我怎么做?
我当前的 sources.list 内容是:
一个简单的 apt-get install 包不起作用:
c - memcpy(&a + 1, &b + 1, 0) 是否在 C11 中定义?
这个问题是在前面关于 的定义性的问题之后进行的memcpy(0, 0, 0)
,最终确定为未定义的行为。
如链接问题所示,答案取决于 C11 第 7.1.4:1 条的内容
除非在随后的详细描述中另有明确说明,否则以下每个语句都适用: 如果函数的参数具有无效值(例如函数域之外的值,或程序地址空间之外的指针,或空指针,[…]) […] 行为未定义。[…]
标准函数memcpy()
需要指向void
and的指针const void
,如下所示:
这个问题之所以值得问,是因为标准中有两个“有效”指针的概念:有些指针可以通过指针算术有效地获得,并且可以有效地与<
,>
与同一对象内的其他指针进行比较。并且有些指针对取消引用有效。前一个类包括“过去”指针,例如以下代码段中的&a + 1
和&b + 1
,而后一个类不包括这些为有效的。
如果将上述代码段视为已定义的行为,鉴于 的参数memcpy()
被键入为void
无论如何的指针,因此它们各自的有效性问题不能与取消引用它们有关。或者应该&a + 1
并且&b + 1
被认为是“在程序的地址空间之外”?
这对我很重要,因为我正在将标准 C 函数的效果形式化。memcpy()
我已经编写了as的一个前提条件requires \valid(s1+(0 .. n-1));
,直到有人指出 GCC 4.9 已经开始积极优化此类库函数调用,超出了上面公式中表达的内容(确实如此)。这个特定规范语言中的公式\valid(s1+(0 .. n-1))
等价于true
when n
is 0
,并且不捕获 GCC 4.9 依赖于优化的未定义行为。
c++ - 如何优化默认 if-branch
我有以下代码。鉴于 foo 是如何被调用的,GCC 和 Clang 可以提供哪些编译器参数来优化 if 语句,就像 icc 一样?
代码:
GCC 4.9 -O2 反汇编:
Clang 3.4 -O2 拆解:
IntelCC 13 -O2 反汇编:
模板化foo我们得到以下信息:
GCC 4.9 是隐式内联的:
c++ - gcc-4.8(和 4.9)无法识别 -std=c++11 参数
我正在尝试使用 gcc-4.9 编译为 Web 服务器 ( https://github.com/eidheim/Simple-Web-Server ) 下载的代码示例,但出现无法解决的错误:
^
我已经尝试了两种编译器选项,但都没有解决问题。以下是 make 文件中的相关位:
我使用的是 gcc-4.8。我读到 gcc 4.9 对正则表达式有(更好的)支持并安装了它,但我得到了同样的错误。
有没有人遇到过这个?据我所知,gcc-4.9 是可用的最类似于 c++11 的编译器。任何人都可以提出解决此问题的方法吗?
谢谢
麦克风
c++ - gcc 模板递归失败,而 clang 没有
比较 clang 3.4.2 和 gcc 4.9,以下代码哪个正确?
clang 打印 0,gcc 给出典型的达到模板最大深度错误。
c++ - 为什么我不能继承虚拟基础的构造函数?
我正在尝试使用 g++ 4.9.0 编译以下简单代码:
但我收到以下错误:
难道我做错了什么?它是编译器错误吗?
c++ - gcc 中的“假设”子句
gcc(最新版本:4.8、4.9)是否有类似于__assume()
icc 支持的内置的“假设”子句?例如,__assume( n % 8 == 0 );
c++ - auto 作为常规函数中的参数是 GCC 4.9 扩展吗?
gcc 4.9 允许以下代码,但 gcc 4.8 和 clang 3.5.0 拒绝它。
我进入warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]
4.9 但在 4.8 和 clang 我得到了error: parameter declared 'auto'
.
c++ - MinGW GCC 4.9.1 和浮点确定性
我编写了一个小程序来计算 3 坐标向量的欧几里得范数。这里是:
在我的电脑上,它打印-1.12323e-016
.
我知道浮点类型应该小心处理。但是,我认为浮点运算至少在某种程度上是确定性的。这篇关于浮点确定性的文章指出:
保证的一些事情是加法、减法、乘法、除法和平方根的结果。这些操作的结果保证是正确四舍五入的精确结果(稍后会详细介绍),因此如果您提供相同的输入值、相同的全局设置和相同的目标精度,则可以保证得到相同的结果。
如您所见,该程序对浮点值执行的唯一操作是加法、减法、乘法和平方根。如果我相信我上面引用的文章,考虑到它在单个线程中运行并且我没有更改舍入模式或任何其他与浮点相关的内容,我认为这norm(arr) - norm(arr)
是0
因为我对相同的值执行完全相同的操作两次。
我的假设是错误的,还是编译器不严格符合 IEEE 浮点数学的情况?我目前正在使用 MinGW-W64 GCC 4.9.1 32 位(我尝试了从-O0
到 的每个优化级别-O3
)。显示了与 MinGW-W64 GCC 4.8.x 相同的程序0
,这是我所期望的。
编辑:我反汇编了代码。我不会发布整个生成的程序集,因为它太大了。但是,我相信相关部分在这里:
如您所见,__Z4normIdLj3EET_RKSt5arrayIS0_XT0_EE
它被调用了两次,因此它不是内联的。虽然我不明白整个事情,也无法说出问题所在。