c++14相关内容
g++ --version 产生: g++.exe (x86_64-posix-seh-rev0, 由 MinGW-W64 项目构建) 4.9.1版权所有 (C) 2014 Free Software Foundation, Inc.这是免费软件;查看复制条件的来源.没有保修单;甚至不考虑适销性或特定用途的适用性. 程序: #include #include
..
考虑这段代码: 结构 S{诠释 x;双 y = 1.1;};主函数(){S s = {0};} 根据 C++14 标准,§ 8.5.1/7 如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员都应从其大括号或相等初始化器中初始化,或者,如果没有大括号或相等- 初始化器,来自一个空的初始化器列表 (8.5.4). 代码应该完全有效. 但是,g++ 4.9.2 拒绝该
..
出于元编程目的,我希望结构包含另一个类型的类型别名: struct Foo {};结构 WithNestedTypeAlias {使用 Foo = Foo;}; 然后我可以在模板等中执行 WithNestedTypeAlias::Foo 之类的操作. 据我了解,这种类型别名是有效的,因为它不会改变 Foo 类型的含义.Clang 愉快地编译了这个. 但是,GCC 抱怨: test
..
以下程序的正确行为是什么? //example.cpp#include #include 结构富{无效酒吧()常量{std::cout MakeFoo() {返回 std::make_shared();}int main() {自动 p { MakeFoo()
..
我在 Ubuntu 14.04 LTS 上使用 g++ 4.8.4.尝试使用 '-std=c++14' 进行编译时,出现此错误: g++: 错误无法识别命令行选项'-std=c++14' 使用 '-std=c++11' 编译可以正常工作,所以我不确定发生了什么.g++ 真的不支持 c++14 吗?我是否使用了错误的命令行选项? 我使用了“sudo apt-get install g++"
..
在Boost mailinglist上,以下聪明@LouisDionne 最近发布了创建类似元组的实体的技巧: #include 自动列表 = [](自动 ...xs) {返回[=](自动访问){返回访问(xs ...);};};自动长度 = [](自动 xs) {return xs([](auto ...z) { return sizeof...(z); });};主函数(
..
我需要在性能关键路径上生成随机布尔值. 我为此编写的代码是 std::random_device rd;std::uniform_int_distribution随机化器(0, 1);const int val randomizer(std::mt19937(rd()));const bool isDirectionChanged = static_cast(val); 但不要认为这
..
gcc 8 和 clang 7 不接受以下代码,它们应该默认构造一个 unsigned int 类型的临时代码: unsigned int ui = unsigned int{}; clang 7报错如 :6:22: error: 'unsigned' 之前的预期主表达式 Visual C++ 2015 和 2017 接受这一点. 显然,这适用于诸如 int 之类的类型,或任何默认可
..
我很好奇为什么可以在构造函数中修改 const 成员. 初始化中是否有任何标准规则可以覆盖成员的“常量"? 结构栏{常量 int b = 5;//默认成员初始化酒吧(int c):b(c){}};酒吧 *b = 新酒吧(2);//问题:Bar::b 修改为 2//期望它是一个错误 有什么想法吗? 解决方案 这不是修改(或赋值),而是 初始化.例如 结构栏{常量 int b =
..
这里有 8 种在 C++11 中声明和初始化数组的方法,在 g++ 下似乎没问题: /*0*/std::arrayarr0({1, 2, 3});/*1*/std::arrayarr1({{1, 2, 3}});/*2*/std::arrayarr2{1, 2, 3};/*3*/std::arrayarr3{{1, 2, 3}};/
..
类似:Travis CI 与 Clang 3.4 和 C++11 如何让 Travis CI 与 C++14 一起工作? 这是我们当前的 .travis.yml 文件: 语言:cpp编译器:- 海合会- 铿锵操作系统:- linux- osx脚本:做主要的 这是我们的makefile # Factor Pro# 宏CXXFLAGS = -Os -std=c++14# 规则全部::
..
我正在尝试将 [[deprecated]] 属性引入我的代码库.但是,并非我需要支持的所有编译器都支持这种语法(在标准化之前不同编译器使用的各种方法在 属性标准化提案 N2761).因此,我尝试在此属性中进行有条件地编译,首先使用 __has_cpp_attribute 类似宏的函数(如果可用),如下所示: #if defined(__has_cpp_attribute) &&__has_cpp
..
传统上,避免在 C++ 中包含多个标头的标准和可移植方法是使用 #ifndef - #define - #endif预编译器指令方案,也称为 宏守卫方案(见下面的代码片段). #ifndef MY_HEADER_HPP#define MY_HEADER_HPP...#万一 然而,在大多数实现/编译器(见下图)中,有一个更“优雅"的替代方案,其用途与称为 #pragma once.#pragma
..
假设我有三个编译对象,全部由相同的编译器/版本生成: A 是使用 C++11 标准编译的 B 使用 C++14 标准编译 C 是使用 C++17 标准编译的 为简单起见,我们假设所有标头都是用 C++11 编写的,仅使用语义在所有三个标准版本之间都没有改变的结构,因此任何相互依赖都可以通过标头包含正确表达并且编译器没有反对. 这些对象的哪些组合是,链接到单个二进制文件是否安全
..
我正在编写一个包含同一类的子对象集合的类,并希望使用标准提供的函数而不是以下函数来迭代和索引它们:first()、next()、previous()、last()、getchild(x) 等p> 在 c++14 中,我必须实现哪些函数才能使类在所有情况下都可迭代/可索引? 功能: begin() cbegin() rbegin() crbegin() end() cend(
..
C++98 有 front_inserter、back_inserter 和 inserter,但似乎没有这些的任何 emplacement 版本C++11 或草案 C++14.我们不能拥有 front_emplacer、back_emplacer 和 emplacer 是否有任何技术原因? 解决方案 我们不能有front_emplacer、back_emplacer和emplacer
..
我正在尝试编写 is_iterator 类型特征.当 T 是迭代器类型时 is_iterator::value == true 否则是 is_iterator::value == false. 到目前为止我尝试了什么: 模板结构 is_iterator : std::false_type {};模板s
..
C++14 通过为值键入 0b 前缀来增加使用二进制文字的能力: int v = 0b1111;//15 十进制 但是对于 std::hex 或 std::oct 等流没有 std::bin 操纵器.所以我需要使用例如std::bitset 用于打印目的: std::cout (v)
..
C++98 有 front_inserter、back_inserter 和 inserter,但在C++11 或 C++14 草案.是否有任何技术原因我们不能拥有 front_emplacer、back_emplacer 和 emplacer? 解决方案 是否有任何技术原因我们不能拥有 front_emplacer、back_emplacer 和 emplacer? 不,没有技
..
我想尝试将项目从 gcc 迁移到 clang++.我承认我的无知,我不知道为什么下面的代码 template constexpr T pi{std::acos(T(-1.0))}; 使用 g++ 静默编译,但 clang++ 产生错误 trig.hpp:3:13: 错误:constexpr 变量 'pi'必须由常量表达式初始化constexpr T pi{std::acos(T(-1.0))
..