问题标签 [gcc8]

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.

0 投票
1 回答
855 浏览

c++ - 保证复制省略的行为是否取决于用户定义的复制构造函数的存在?

以下代码在 GCC 8.0.1 下使用或不使用用户定义的复制构造函数的行为不同:

使用任一注释的用户定义的复制构造函数(即使使用#2,执行简单浅拷贝的构造函数),断言都不会失败,这意味着保证复制省略按预期工作。

但是,如果没有任何用户定义的复制构造函数,则断言失败,这意味着函数中的对象s不是main默认构造的。为什么会这样?不保证复制省略在这里执行吗?

0 投票
8 回答
28351 浏览

c++ - gcc-8 -Wstringop-truncation 有什么好的做法?

GCC 8 添加了-Wstringop-truncation警告。来自https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944

在 GCC 8.0 中通过 r254630 为错误 81117 添加的 -Wstringop-truncation 警告专门用于突出可能意外使用 strncpy 函数,该函数从源字符串中截断终止 NUL 字符。请求中给出的此类滥用的示例如下:

我收到与此代码相同的警告。

考虑到this->nameischar name[32]nameis a的长度可能大于 32。如果它大于char*32,我想复制name并截断它。应该是 31 而不是 32?我很困惑。NUL 终止不是强制性的。this->namesize_tthis->name

0 投票
0 回答
83 浏览

c++ - 类模板的模板参数推导不适用于 gcc 8.1.0?

我试图创建属性向量。这个向量应该是一种“标记”,有助于区分其他元组。

这个简单的代码片段适用于 clang 6.0,不适用于任何 GCC 版本(仅尝试过 7.3.0、8.1.0):

GCC 8.1.0 抛出:

为什么 GCC 推断 Ts 是空包?我在这里犯了一些错误还是编译器问题?

根据此链接http://en.cppreference.com/w/cpp/compiler_support GCC 应该支持此功能。

0 投票
2 回答
191 浏览

c - “指向 int 问题的指针”

今天我试图从这里解决一个测验,当我到达问题 3 时,有以下代码:

问题是:

在 C 程序上方选择正确的语句:

因为这条线:

据我了解,这表明不会出现编译或运行时错误,我决定

是不正确的。

但是因为这里没有编译/运行时错误,所以会出现 AnswersBC错误。

作者说接受的答案是:

现在这是我的问题,为什么没有问题,因为这样做:

Valgrind 报告:

我认为正确的free调用应该是:

测试Linux mint 19GCC-8valgrind-3.13.0

0 投票
1 回答
792 浏览

c - 函数声明不是原型

以下代码编译良好:

但我不能编译它:

我得到以下信息:

我怎样才能避免/解决这个问题?我需要这个编译器标志-Wstrict-prototypes

0 投票
1 回答
367 浏览

ubuntu-16.04 - Ubuntu 16.04 gcc8 中的 Intel TBB:std::uncaught_exception()' 已弃用

我想在我的 Ubuntu 16.04 服务器版和 gcc 版本 8.1.0 (Ubuntu 8.1.0-5ubuntu1~16.04) 中正确安装和配置 Intel TBB 的最新稳定版本。我下载了 Linux 版 TBB 的最新稳定版本:https ://github.com/01org/tbb/releases/download/2018_U5/tbb2018_20180618oss_lin.tgz ,然后按照本视频教程中的说明进行操作: https://www。 youtube.com/watch?v=4nrDZjyIOXE我在这个文件/home/marco/tbb2018_20180618oss/bin/tbbvars.sh 中修改了这一行:

进入

然后,按照我执行的相同视频教程:

在主目录 tbb2018_20180618oss 我创建了一个测试目录并用一个简单的test.cpp文件填充它:

在哪里test.cpp

编译我得到了一个不太容易理解的警告列表,因为我实际上并没有把任何东西放进去test.cpp

我错过了什么?如何解决问题?期待您的帮助。马可

0 投票
2 回答
446 浏览

c++ - std::set 与派生类对象但基类比较器与 gcc8.1

bh

cpp

当 c.cpp 使用 g++ 8.1 编译时,它无法编译并出现此静态检查错误

我理解错误是因为在编译时,编译器无法确定如何比较_Key=B*,如果我提供 的定义B,它应该可以正常工作。

但是,我的问题是,是否有任何方法可以告诉编译器B实际上是从中派生的,A并且有一种方法可以比较A对象。

另请注意,我不想更改std::set<B*, A::Less>哪个std::set<A*, A::Less>也可以解决此问题。

0 投票
1 回答
1209 浏览

c++ - 向量必须与其分配器具有相同的值

此 MCVE 使用 gcc 7.3 编译/运行:
请注意,此 MCVE 已大大减少,以保持错误可重现,因此Allocator模板中的代码没有意义,但它不会影响星座!

Allocator我自己的分配器在哪里。

我们现在使用 gcc 8.2 并收到此错误

当我更改FaF::smatch为默认值std::smatch时,它会使用 gcc 8.2 编译/运行。

我的问题:

是什么原因以及为什么此代码无法使用 gcc 8.2 编译,即使它使用带有 C++17 设置的 gcc 7.3 编译 - 没有其他任何改变。这让我感到困惑。某处改变了一些显然与 C++ 无关的东西。

现场观看- clang 6.0 也接受该版本FaF::smatch

编译器标志:
-O3 -std=c++17 -Werror -Wextra -Wold-style-cast -Wall

0 投票
1 回答
74 浏览

c++ - 自定义迭代器

我尝试为我的一个类实现迭代器,令人惊讶的是我得到了以下结果:

警告:ISO C++ 说这些是模棱两可的,即使第一个的最差转换优于第二个的最差转换

候选1:'Iterator Iterator::operator+(const ptrdiff_t&) [with T = int; ptrdiff_t = long long int]'

候选 2:'operator+(int, unsigned int)'

这是Iterator代码:

这就是我typedef在课堂上的表现:

也许我遗漏了一些东西,但是如何(Iterator, ptrdiff_t)并且(int, unsigned int)模棱两可?

0 投票
0 回答
561 浏览

gcc - 有人在 OpenBSD 6.3 上构建过 gcc 8.2.0 吗?

当我尝试在 OpenBSD 6.3 上构建 gcc 8.2.0 时出现以下错误:

我的过程:

  • 安装 OpenBSD(使用默认值)
  • 运行系统补丁
  • 添加一些包:

    /li>
  • 获取源码:

    /li>
  • 建造:

    /li>

这也以类似的方式在 gcc 8.1.0 中失败。

我还尝试使用 clang 而不是 gcc 来构建,如下所示:

这没有什么区别,这很有意义,因为它显然在第 3 阶段失败了(gcc 再次编译自身以进行最终检查)。

烦人的是,压缩包中有一个文件stdatomic.h

所以我不知道我错过了什么。

有没有人成功建造过这个?如何?