问题标签 [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.
c++ - 保证复制省略的行为是否取决于用户定义的复制构造函数的存在?
以下代码在 GCC 8.0.1 下使用或不使用用户定义的复制构造函数的行为不同:
使用任一注释的用户定义的复制构造函数(即使使用#2,执行简单浅拷贝的构造函数),断言都不会失败,这意味着保证复制省略按预期工作。
但是,如果没有任何用户定义的复制构造函数,则断言失败,这意味着函数中的对象s
不是main
默认构造的。为什么会这样?不保证复制省略在这里执行吗?
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->name
ischar name[32]
和name
is a的长度可能大于 32。如果它大于char*
32,我想复制name
并截断它。应该是 31 而不是 32?我很困惑。NUL 终止不是强制性的。this->name
size_t
this->name
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 应该支持此功能。
c - “指向 int 问题的指针”
今天我试图从这里解决一个测验,当我到达问题 3 时,有以下代码:
问题是:
在 C 程序上方选择正确的语句:
因为这条线:
据我了解,这表明不会出现编译或运行时错误,我决定
是不正确的。
但是因为这里没有编译/运行时错误,所以会出现 AnswersB
和C
错误。
作者说接受的答案是:
现在这是我的问题,为什么没有问题,因为这样做:
Valgrind 报告:
我认为正确的free
调用应该是:
测试Linux mint 19
,GCC-8
和valgrind-3.13.0
c - 函数声明不是原型
以下代码编译良好:
但我不能编译它:
我得到以下信息:
我怎样才能避免/解决这个问题?我需要这个编译器标志-Wstrict-prototypes
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
:
我错过了什么?如何解决问题?期待您的帮助。马可
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>
也可以解决此问题。
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
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)
模棱两可?
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
:
所以我不知道我错过了什么。
有没有人成功建造过这个?如何?