草庐IT

c++ - 使 C++14 constexpr 函数与 C++11 兼容

我编写了一个类multi_array,它是std::array对多维的扩展。templateclassmulti_array{templateconstexprstd::size_tlinearized_index(meta::index_sequence,Idx...idx)const{std::size_tindex=0;usingunpack=std::size_t[];(void)unpack{0UL,((void)(index=(index+unpack{std::size_t(idx)...}[I])*meta::pack_element::value),0UL)...};

C++14:使用三元表达式从 constexpr 推导出(自动)返回类型

我正在C++14中试验constexpr函数。以下代码按预期计算阶乘:templateconstexprautofact(Ta){if(a==1)return1;returna*fact(a-1);}intmain(void){static_assert(fact(3)==6,"factdoesn'twork");}当用clang编译如下:>clang++--versionclangversion3.5.0(tags/RELEASE_350/final)Target:x86_64-unknown-linux-gnuThreadmodel:posix>clang++-std=c++14c

c++ - C++14/17 中的延迟评估 - 只是 lambdas 还是 future 等?

我刚刚读到:LazyEvaluationinC++并注意到它有点旧,而且大多数答案都是关于2011年之前的C++。现在我们有语法lambdas,它甚至可以推断返回类型,所以惰性求值似乎可以归结为只是传递它们:而不是autox=foo();你执行autounevaluted_x=[](){returnfoo();};然后评估您需要的时间/地点:autox=unevaluted_x();似乎没有更多的东西。但是,answersthere之一建议使用futures与异步启动。有人可以用C++或更抽象地说明为什么/如果future对于惰性评估工作很重要吗?似乎future很可能会被急切地评估,

c++ - 在 C++11/14 中有效地生成随机数据字节

我的要求是生成数据的随机字节(不是随机数),也就是均匀分布的位。因此,我想知道使用C++11/14随机工具执行此操作的正确/有效方法是什么。我浏览了这些示例,但它们所有似乎都专注于数字生成(整数、float等)我正在使用的当前解决方案如下:#include#includeintmain(){std::random_devicerd;std::uniform_int_distributiondist(0,255);std::vectordata(1000);for(char&d:data){d=static_cast(dist(rd)&0xFF);}return0;}

c++ - C++14 多态 lambda 可能存在 gcc 错误?

我发现使用多态C++14lambda(参数中带有auto的lambda)的奇怪行为:片段0:#includetemplatevoiddoLambda(T&&mFn){std::forward(mFn)(int{0});}templatevoidtest(T&&mV){doLambda([&mV](automE){std::forward(mV);});}intmain(){test(int{0});return0;}clang++3.5.1:代码片段编译并运行成功。g++4.9.2:片段编译失败:example.cpp:Ininstantiationof'test(T&&)::[wit

c++ - 重新解释强制转换模板非类型参数 : clang c++14 vs c++1z

考虑以下代码:templatestructfoo{};intmain(){foof;(void)f;}当使用-std=c++11或-std=c++14在clang3.8.0上编译时,程序会编译。使用-std=c++1z编译时,会出现以下错误:main.cpp:4:9:error:non-typetemplateargumentisnotaconstantexpressionfoof;^~~~~~~~无论C++模式如何,gcc5.3.0都不会编译代码,我认为这是正确的。C++14和C++1z之间的clang有什么区别,为什么它接受代码?与此处相关的C++1z中是否发生了一些变化?

c++ - 我们可以在 C++14 中省略 std::array 的双括号吗?

我现在正在阅读C++14的标准草案,也许我的法律术语有点生疏,但我找不到任何关于允许像下面这样的初始化的内容std::arrayarr{1,2,3};合法。(编辑:显然以上是C++11中的合法语法。)目前在C++11中,我们必须将std::array初始化为std::arrayarr{{1,2,3}};//uniforminitialization+aggregateinitialization或std::arrayarr={1,2,3};我以为我在某处听说他们正在放宽C++14中的规则,以便我们在使用统一初始化时不必使用双括号方法,但我找不到实际证据。注意:我关心这个的原因是因为我目

c++ - 简单的 std::regex_search() 代码无法使用 Apple clang++ -std=c++14 编译

这是MCVE:#include#includestd::strings(){return"test";}intmain(){staticconststd::regexregex(R"(\w)");std::smatchsmatch;if(std::regex_search(s(),smatch,regex)){std::cout它编译得很好:$clang++-std=c++11main.cpp但不是:$clang++-std=c++14main.cpp后一种情况下的错误信息(使用-std=c++14):main.cpp:14:9:error:calltodeletedfunction'

c++ - 在 C++11/14 中处理儒略日期

最好/最简单的处理方式是什么Juliandates在C++中?我希望能够在儒略日期和公历日期之间进行转换。我有C++11和C++14。可以图书馆帮助解决这个问题? 最佳答案 在Juliandate之间转换和std::chrono::system_clock::time_point需要做的第一件事是找出时代之间的差异。system_clock没有官方纪​​元,但事实上的标准纪元是1970-01-0100:00:00UTC(公历)。为方便起见,声明Juliandate很方便。纪元方面的prolepticGregoriancalendar

c++ - 如何在 C++14 中编写通用转发 lambda?

如何在C++14中编写通用转发lambda?尝试#1[](auto&&x){returnx;}在函数体内,x是一个左值,所以这不起作用。尝试#2[](auto&&x){returnstd::forward(x);}这会在lambda中正确转发引用,但它总是会返回按值(除非编译器省略了拷贝)。尝试#3[](auto&&x)->decltype(x){returnstd::forward(x);}这将返回与参数相同的类型(可能->auto&&也可以)并且似乎可以正常工作。尝试#4[](auto&&x)noexcept->decltype(x){returnstd::forward(x);}