草庐IT

c++ - 自动检测C++14 "return should use std::move"情况

我的理解是,在C++17中,以下代码片段旨在做正确的事:structInstrument;//instrumented(non-trivial)moveandcopyoperationsstructBase{Instrumenti;};structDerived:publicBase{};structUnrelated{Instrumenti;Unrelated(constDerived&d):i(d.i){}Unrelated(Derived&&d):i(std::move(d.i)){}};Unrelatedtest1(){Derivedd1;returnd1;}Basetest2

c++ - 当语言环境需要 "3.14"时,如何使用 scanf 解析 "3,14"之类的数字

假设我必须读取一个包含一堆float的文件。数字可以像1e+10、5、-0.15等,即任何通用float,使用小数点(这是固定的!)。但是,我的代码是另一个应用程序的插件,我无法控制当前的语言环境。例如,它可能是俄语,那里的LC_NUMERIC规则要求使用十进制逗号。因此,Pi应拼写为“3,1415...”,并且sscanf("3.14","%f",&x);返回“1”,x包含“3.0”,因为它拒绝解析过去的“.”在字符串中。对于此类数字解析任务,我需要忽略语言环境。如何做到这一点?我可以写一个parseFloat函数,但这似乎是一种浪费。我还可以保存当前的语言环境,将其暂时重置为“C”

c++ - 在另一个文本中搜索长度超过 14 个字符的匹配子字符串的高效算法

我有一个很长的文本(大约5MB文件大小)和另一个称为模式的文本(大约2000个字符)。任务是从长文本中的15个字符或更长的基因组模式中找到匹配的部分。例子:长文本:ACGTACGTGTCAAAAACCCCGGGGTTTTAGTACCCGTAGGCGTAT和更长的时间图案:ACGGTATTGAC公司AAAACCCCGGGGTTTTATGTTCCCAG我正在寻找一种高效(且易于理解和实现)的算法。如果可能的话,奖金将是一种仅使用C++中的字符数组来实现此功能的方法。 最佳答案 这是一种算法-我不确定它是否有名称。它需要一个“滚动散列”—

C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本

以下代码使用设置为C++17的gcc7.1.0进行编译,但不使用设置为C++14(或VisualStudio2017)进行编译。在Wandbox上很容易重现.要让它与C++11/14一起工作,必须做些什么?#include#includeintmain(){structConvert{operatorstd::chrono::milliseconds(){std::cout 最佳答案 让我们从为什么这在C++14中不起作用开始。std::chrono::duration有两个相关的c'tors(std::chrono::millis

C++14 对 is_same::value 使用别名

Thisquestion使用is_same::value.我希望有一个C++14usingalias:is_same_v类似于辅助类型:conditional_t,enable_if_t,和tuple_element_t我在myanswer中使用.因为我使用这些函数中的任何一个的唯一目的就是获取type.所以*_t助手才有意义。这让我想到了我的问题,为什么没有usingaliasis_same_v在C++14中?我唯一用的is_same因为它是value.也许使用is_same通常不是用于模板声明吗? 最佳答案 简介引入std::e

c++ - 验证我的编译器是否符合 c++14 的最简单的 C++ 示例?

我下周要上C++11/14的课,需要验证我的设计工具是最新的并且可以实际编译C++11/14。我可以将最简单的代码片段放在一起以验证我是否可以在我的Linux机器上实际编译和执行C++11/14代码?我知道我需要GCC4.9.X或更高版本,但我只想确保在出现之前一切正常。感谢您的帮助。 最佳答案 您最初可以使用-std=c++14进行编译。如果您的gcc(或clang)不兼容c++14,那么编译将失败(由于未知标志):g++:error:unrecognizedcommandlineoption'-std=c++14'关于功能可用性

c++ - C++14/17 项目是否可以使用使用 C++11 标准编译的二进制库,或者源代码是否需要重新编译?

可以在c++14/17项目中使用使用C++11编译的二进制文件吗?c++17项目中的c++14二进制库怎么样?或者是否需要使用与项目相同的标准更新和重新编译源代码?是否有任何其他方法可以在新的标准项目中包含旧的标准C++库? 最佳答案 C++标准与二进制文件格式无关。这仅取决于编译器/链接器和操作系统。因此,如果编译器供应商更改了ABI(应用程序二进制接口(interface)),则不能简单地将各个部分链接在一起。你可以在这里读到,只与gcc相关:https://gcc.gnu.org/onlinedocs/libstdc++/ma

C++11/14 : How to remove a pointer-to-member from a type?

在C++11或C++1y/14中:给定一个TC::*形式的指向成员类型的值,我想得到指向类型例如:#includeusingnamespacestd;structT1{staticvoidf(){coutstructV;templatestructV{staticconstexprT1U1::*pm=&U1::x;};templatestructV{staticconstexprT2U2::*pm=&U2::x;};templatevoidf(Wpm){typedef???T;T::f();}intmain(){f(V::pm);f(V::pm);}有没有办法做到这一点?上面的???是

c++ - C++14及以上的stm32 hal库警告

我也在STM32社区论坛中发布了相同的question,但没有收到回复。我在启用了C++14的项目中使用stm32HAL库。它向我发出以下警告,我无法摆脱。../platform/stm32/l4/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h:735:57:warning:conversiontovoidwillnotaccessobjectoftype'volatileuint32_t{akavolatilelongunsignedint}'UNUSED(tmpreg);\当调用__GPIOX_CLK_ENABLE()或__HAL_RCC_

c++ - 使用 C++14 和 Linux 的 Travis CI

类似:TravisCIwithClang3.4andC++11如何让TravisCI与C++14一起工作?这是我们当前的.travis.yml文件:language:cppcompiler:-gcc-clangos:-linux-osxscript:makemain这是我们的makefile#FactorPro#MacrosCXXFLAGS=-Os-std=c++14#Rulesall::mainmain:main.cppg++-omain$(CXXFLAGS)main.cppclean:rm-rf*.omain它适用于osx,但不适用于linux。 最佳答