草庐IT

make_tuple

全部标签

java - make 和 ant 的真正用途是什么?

当我使用C/C++和Java进行开发时,我只是制作了一个可以执行所有操作的compile.bat脚本,这对我来说很好。为什么要使用make,为什么要使用ant? 最佳答案 假设您有1000个源文件并且只更改其中一个。使用.bat脚本,您将不得不重新编译所有内容,并使您只重新编译发生变化的部分。这可以节省相当多的时间(在一个大项目上阅读数小时)。更好的是,如果您更改其中一个头文件,make将只重新编译使用该头文件的源文件。这两个主要特性意味着make及其后代被用于所有使用编译语言的严肃软件开发。

C++17 make_optional constexpr-ness

Thispage说make_optionalC++17中的函数返回constexproptional.我认为(虽然我可能是错的)这需要optional有一个constexpr复制或移动构造函数。然而,thispage也说不是这样的。我不知道如何make_optional可以按照当前的C++1z草案实现。参见thispost为了澄清。是否有一些解决方法,或者这可能只是标准草案/cppreference的错误? 最佳答案 感谢@Yakk和@T.C.为了他们的解释。我觉得一个例子应该让事情更清楚:structwrapper{intvalu

c++ - 从 std::tuple 解包的值的返回值优化

是否有任何编译器能够对通过std::tuple的函数返回的多个值执行返回值优化?明确一点,在下面的代码中,有没有编译器能够避免不必要的拷贝?std::vectora;std::listb;std::tie(a,b)=myFunctionThatReturnsAVectorAndList(); 最佳答案 不用再担心了。如果编译器无法执行RVO,movesemantics将开始。 关于c++-从std::tuple解包的值的返回值优化,我们在StackOverflow上找到一个类似的问题:

c++ - Make/gcc 神秘错误 2 : how to have more information?

我有一个使用Makefile编译的C++项目,有时当(我的猜测)缺少一些包含时,我会收到一条神秘的“错误2”消息,并且make进程停止。我怀疑缺少包含,因为这是我包含一个不存在的头文件时第三次发生这种情况。看起来像这样:----Buildtmp/foo.o--------Buildtmp/bar.o--------Buildtmp/toto.o--------Buildtmp/tata.o----make:***[build_Project]Error2这让我抓狂,因为即使使用冗长的命令(显示每个g++调用的地方),我也看不到任何东西。我原以为这家伙会抛出一些错误消息,例如“找不到he

C++11 std::forward_as_tuple 和 std::forward

当我将它们用作std::forward_as_tuple的参数时,我是否应该std::forward我的函数参数?templatevoidfn(List&&...list){//doIneedthisforward?call_fn(forward_as_tuple(forward(list)...));}我知道它们将被存储为右值引用,但还有什么我应该考虑的吗? 最佳答案 您必须使用std::forward以保留fn()参数的值类别。由于参数在fn中有一个名称,它们是左值,并且在没有std::forward的情况下,它们将始终照原样传

c++ - 比较 std::tuple_element 和 decltype(std::get) 时,std::is_same 返回 false

我找不到类似的问题...我认为有两种“简单”的方法可以在编译时获取元组的第I^th个元素的类型(如果我错了请纠正我):usingTI1=typenamestd::tuple_element::type;usingTI2=decltype(std::get(Tuple{}));事实上,如果我们通过typeid(...).name()打印每一个的类型,它们返回相同的值。但是...std::is_same当我比较这些时返回false:liveexample这是预期的吗?为什么?usingTuple=std::tuple;constexprsize_tI=0;static_assert(std

c++ - 将 std::make_tuple 与重载函数一起使用时如何避免 static_cast

g++说error:toomanyargumentstofunction'constexprstd::tuple如果我在std::make_tuple调用中省略了static_cast#includetypedefint(*func_t)();intnumber(){return2;}doublenumber(boola){return1.2;}intmain(){//Withastatic_castitcompileswithoutanyerror//std::tupletup=std::make_tuple(static_cast(number));std::tupletup=st

c++ - std::tuple 中的空类

Thesizeofanyobjectormembersubobjectisrequiredtobeatleast1evenifthetypeisanemptyclasstype[...],inordertobeabletoguaranteethattheaddressesofdistinctobjectsofthesametypearealwaysdistinct.cppreferencequote这个我就知道了。我刚发现的是一些库类型,如std::tuple不使用任何大小来包含空类。这是真的?如果是,那怎么样?编辑:在阅读了@bolov对他的回答的最后注释后,我还有一个问题:因为Em

c++ - std::make_unique<T[]>(size) 值初始化

是std::make_unique(1000)总是值初始化元素?好吧,我研究了实现,clang以及g++都在使用newT[size]()进行值初始化。但我找不到符合C++14/17标准的实现必须这样做。 最佳答案 如果标准库符合C++14,那么是的,它必须这样做(使用newT[size])。来自C++14§20.8.1.4[unique.ptr.create]/4:templateunique_ptrmake_unique(size_tn);Returns:unique_ptr(newremove_extent_t[n]()).

c++ - 我可以将 boost::make_shared 与私有(private)构造函数一起使用吗?

考虑以下几点:classDirectoryIterator;namespacedetail{classFileDataProxy;classDirectoryIteratorImpl{friendclassDirectoryIterator;friendclassFileDataProxy;WIN32_FIND_DATAWcurrentData;HANDLEhFind;std::wstringroot;DirectoryIteratorImpl();explicitDirectoryIteratorImpl(conststd::wstring&pathSpec);voidincreme