草庐IT

parameter-passing

全部标签

c++ - 为什么按值传递 string_view?为什么 Visual Studio 不能对此进行优化?

根据我的直觉,我假设新的string_view需要通过引用传递,因为这样效率更高(只传递指针而不是完整的类)。然而,一些消息来源表明最好按值传递它,避免“别名”问题。C++viewtypes:passbyconst&orbyvalue?https://abseil.io/tips/1在尝试几种替代方案时,我证实了我的直觉,如果该函数只是转发string_view(所有源均使用/Ox编译),那么通过引用传递会更快比如这段代码externautootherMethodByReference(conststd::string_view&input)->void;autothisMethodB

c++ - C/ObjC - 参数大小。使用指针与值

在什么时候我应该在我的函数/方法中传递一个指向数据的指针,而不是仅仅传递值?显然,在某些情况下我希望函数对给定数据进行操作,但如果我只是为了信息/复制目的传递值怎么办?例如,foo作为基本类型:voidsetFoo(intfoo);...intfoo=1;setFoo(foo);现在foo作为一个简单的结构:typedefstruct{intx;inty;}Foo;voidsetFoo(Foofoo);...Foofoo={1,2};setFoo(foo);//ApplecodedoesthiskindofthingwithCGSize,CGPoint...但是如果foo是一个更大的结

c++ - 使用 C++(和 GSL)扩展和嵌入 Python(和 NumPy): pass gsl_matrix to python and back

我的问题“应该”很简单,但我仍然无法解决。我目前从事的项目需要一些繁重的计算(用C++完成)和一些模拟后数据分析(用Python完成)。但是,现在我正在更改主要算法,我将需要在C++和Python之间来回“循环”一些计算。也就是说,我需要在C++和Python之间来回移动一个double矩阵。在C++中,数据矩阵是一个“gsl_matrix”对象,而在Python中,相同的矩阵被实现为“numpy数组”。此刻,我正在运行我的C++代码,将矩阵保存到文件,从Python中读取它,将它写回文件,然后在C++中再次打开它以进行进一步计算。因为这是非常低效的,我想问问是否有人可以给我一个例子,

c++ - 在 C++ 中初始化模板时将函数传递给模板对象

我正在尝试为HashMap编写一个实现,除了iostream、string和cassert之外,我不允许使用stdlib中的任何内容。它需要是通用的,因此填充桶的值可以是任何类型。我为此需要模板,但无法设法以任何方式传递哈希函数。这将是头文件:templateclasshashTable{public:hashTable(intsize){//Createsanemptyvectorofsizeonthetable}define(Valuev){loadsvalueinVector[hashFunction(v)];}...private:Vectorwithalltheelement

c++ - 使用省略号的回退函数 : can we force the size of the parameters pack?

考虑以下代码:#include#includestructS{templateautof(A&&...args)->decltype(std::declval().f(std::forward(args)...),void()){std::coutvoidf(...){std::cout(42);//->hasf(int)s.f(42);//->hasnotf(int)//oopss.f();//->hasnotf(int)}如示例所示,对f的第三次调用工作正常,即使参数数量错误,因为对于回退函数来说它根本没有错.当以这种方式涉及省略号时,有没有办法强制参数的数量?我的意思是,我可以在

c++ - 什么时候通过复制/引用?

假设我有两个用于operator=重载的模板:classMyClass{public:templatestd::enable_if_toperator=(Tvalue){std::coutstd::enable_if_toperator=(constT&value){std::cout与std::enable_if一起使用的最佳条件是什么?我想到了这个:templatestructpass_copy_cond:std::conditional::value||std::is_pointer::value||(std::is_trivial::value&&sizeof(T)::type

c++ - gcc 与 clang : expanding a captured parameter pack twice

考虑这个代码片段:intmain(){autofirst=[&](auto...one){autofaulty=[&](){[[maybe_unused]]autoi=(one+...);return(one+...);};faulty();};first(1);}另见ongodbolt.似乎当我尝试在内部lambda中将隐式捕获的参数包one扩展两次时,gcc会提示,但clang不会。请注意,当我明确捕获时,例如[&one...],gcc不再提示。对我来说,这看起来像是一个gcc错误,但我想得到比我更有经验的人的一些确认,因为我已经在带有可变捕获的clang中看到(不同的)错误行为h

c++ - boost::spirit 1.53 multi_pass iterator相关的编译错误

代码:typedefstd::string::const_iteratoriterator;namespaceparsers{namespacespirit=::boost::spirit;namespaceascii=::boost::spirit::ascii;namespacephoenix=::boost::phoenix;spirit::qi::ruleaction_parser='"'>spirit::qi::lit("action")>spirit::qi::labels::_r1>'"';}错误:>1>CL:warning:Thisheaderisdeprecated.

c++ - 将参数传递给另一个可变参数函数

有没有什么办法可以让这段代码按预期编译和工作,而无需诉诸va_list东西?#includevoidfct(void){std::cout 最佳答案 我怀疑你误解了签名的意思voidfct(intindex,intindexes...)我怀疑您认为fct()期望一个int单值(index)和一个int的(indexex...)具有C++11风格的参数包扩展。编号:it'sthesameasvoidfct(intindex,intindexes,...)所以两个int单个值和一个C风格的可选参数,您只能通过va_list东西使用。如果

Cause: org.apache.ibatis.binding.BindingException: Parameter ‘xx‘ not found.

Errorupdatingdatabase.Cause:org.apache.ibatis.binding.BindingException:Parameter‘xxx’notfound.Availableparametersare[arg2,arg1,arg0,param3,param1,param2]这种情况可能是由于对数据库进行操作时有多个参数但是持久层即Dao层中的方法内没有写占位符@Param(“xxx”)导致的:例如:对数据库进行更新时:updateid="update">updatelmonkey_cartsetquantity=#{quantity}whereu_id=#{u_