c++17相关内容
3 月 21 日st,标准委员会投票批准了弃用 std::iterator 在 P0174: 与简单地在类定义本身中提供预期的 typedef 相比,长长的 void 参数序列对读者来说不太清楚,这是当前工作草案所采用的方法,遵循模式设置在 c++14 之前 c++17鼓励从 std::iterator 继承 以消除迭代器样板实现中的乏味.但弃用将需要以下条件之一: 迭代器样板文
..
从 std::vector 或其他容器中删除具有特定属性的元素的任务有助于实现函数式风格:为什么要为循环、内存释放和正确移动数据而烦恼? 但是,在 C++ 中执行此操作的标准方法似乎是以下习语: std::vector整数;...插入.擦除(std::remove_if(ints.begin(),ints.end(),[](int x){return x 此示例从整数向量中删除所有小于
..
如果我想使用 std::any 我可以在关闭 RTTI 的情况下使用它.以下示例也使用 -fno-rtti 和 gcc 按预期编译和运行. int main(){std::any x;x=9.9;std::cout (x)
..
我继承了一段非常有趣的代码: inline int round(float a){国际我;__asm {一个拳头我}返回我;} 我的第一个冲动是丢弃它并用 (int)std::round 替换调用(在 C++11 之前,将使用 std::lround 如果它发生在今天),但过了一段时间我开始怀疑它到底是否有一些优点...... 此函数的用例都是 [-100, 100] 中的所有值,因此即
..
据我所知,一个很常见的情况是这样的 template班级{上市:静态 constexpr int I = i;静态 constexpr int J = constexprFunction(i);//进一步的类实现}; 几乎和我一样常见的错误(实际上我在这里的大部分问题都是因为我忘记了它并且不知道正确的问题是什么)如果成员被 odr 使用,则忘记了附加定义: templateconstexpr
..
我有以下示例代码 template班级操作{上市:constexpr 操作(const T1& lhs, const T2& rhs) noexcept: m_lhs(lhs), m_rhs(rhs) { }私人的:const T1&m_lhs;const T2&m_rhs;};int main(){constexpr int a = 3;constexpr int b = 4;constexp
..
我遇到了文件系统库的问题,它应该包含在 c++17 编译器中,2 天后我尝试在 raspberry pi 中安装 gcc-7.0.2 但它没有用,它不能识别命令 gcc-7 或 g++-7 甚至 -std=c++17 所以我不得不使用 apt-get install 安装 g++-6 和 gcc-6无论如何,在安装 6 版本后,编译器包含 c++17.我使用代码块作为 IDE,我不得不添加一个新的
..
通常我只会使用 C 风格的文件 IO,但我正在尝试现代 C++ 方法,包括使用 C++17 特定功能 std::byte 和 std::文件系统. 将整个文件读入内存,传统方法: #include #include char *readFileData(char *path){文件 *f;结构统计 fs;字符 *缓冲;统计(路径,&fs);buf = (char *)malloc(fs.s
..
这个问题旨在将 std::byte 与标准输入输出一起使用. 是否有计划将read(_bytes) 和write(_bytes) 的适当函数重载添加到basic_istream 的接口中> 和 basic_ostream 在未来的标准中?什么理由反对它?我知道应该保留 CharT* 重载.如何使用 std::byte?我目前在我的项目功能中定义 std::istream&读取(std::i
..
我想使用 std::experimental::optional,但 MSVS 2013 告诉我它找不到标题. 为什么它不在那里? 我可以根据其他地方的代码推出自己的代码吗?也许是 C++14 提案? 解决方案 std::experimental::optional 源自 Boost.Optional 库,该实现在 Visual C++ 12.0 中运行良好(尽管它有所不同 一点)
..
我可以 std::vector一个;a. 储备(1000);for(int i=0; i 但是有没有一种更优雅的方式来创建一个并行化版本的 for(int i=0; i
..
我试图尝试使用 C++17 标准中提出的新并行库功能,但我无法让它工作.我尝试使用 g++ 8.1.1 和 clang++-6.0 和 -std=c++17 的最新版本进行编译,但似乎都不支持 #include 、std::execution::par 或任何类似的东西. 在查看并行算法的 cppreference 时,有一长串算法,声称 技术规范提供了来自algorithm、nume
..
似乎大多数人找到 string 大小的方式是他们只使用 my_string.size() 并且它工作正常.嗯,我最近为我做过的班级做了一个作业... if (size(my_string) 而不是...... if (my_string.size() 但令我惊讶的是,我认为正在运行旧编译器的讲师无法运行该行代码.在我的编译器上,它是双向的,我不太确定为什么. 一个完整的程序(两者
..
有点前景:我的任务需要将 UTF-8 XML 文件转换为 UTF-16(当然还有适当的标头).因此,我搜索了将 UTF-8 转换为 UTF-16 的常用方法,发现应该使用 中的模板. 但是现在当它已弃用时,我想知道什么是新的常用方法同样的任务? (完全不介意使用 Boost,但除此之外,我更喜欢尽可能接近标准库.) 解决方案 std::codecvt 模板来自 本身并没有被弃用
..
我查了很多关于c++17下文件系统链接的问题,还是不能成功链接.我的 main.cpp 文件如下. #include int main(int argc, char** argv){std::string imageDirectory = "./image";;std::vector图像路径;for (const auto& entry: std::filesystem::directory_i
..
我使用的是 VS 15.3,它支持集成的 CMake 3.8.如何在不为每个特定编译器编写标志的情况下以 C++17 为目标?我当前的全局设置不起作用: # https://cmake.org/cmake/help/latest/prop_tgt/CXX_STANDARD.html设置(CMAKE_CXX_STANDARD 17)设置(CMAKE_CXX_STANDARD_REQUIRED ON
..
我正在尝试使用 CMake 将 /std:c++17 编译器标志添加到 VS2017.到目前为止,我正在使用“现代"跨平台方式: set(CMAKE_CXX_STANDARD 14)设置(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF) # -std=c++11 而不是 -std=gnu++11设置(MY_CXX_COMPI
..
我想用 C++17 std::variant 替换 boost::variant 并去掉 boost::recursive_wrappercode>,在下面的代码中完全消除对boost的依赖.我该怎么做? #include #include 使用 v = boost::variant>;结构体{v val;};模板类 R,类型名称 T,类型名称 ... Ts>自动减少(T t,Ts .../*t
..
在这个 SO 问题的答案中: C++ 标准库中 boost::variant 的等价物是什么? 提到boost::variant和std::variant有些不同. 就使用这些类的人而言,有什么区别? 委员会表示采用具有这些差异的 std::variant 的动机是什么? 使用其中任何一个进行编码时我应该注意什么,以保持切换到另一个的最大兼容性? (动机是在 C++17
..
使用以下代码,我收到编译错误 C2065 'a': undeclared identifier(使用 Visual Studio 2017): [] {auto [a, b] = [] {return std::make_tuple(1, 2);}();汽车 r = [&] {返回一个;}();//错误C2065}(); 但是,以下代码可以编译: [] {国际a, b;std::tie(a,
..