草庐IT

find_or_initialize_by

全部标签

c++ - C++ 临时对象的生命周期是在什么时候创建的? : expression extended by binding it to a local const reference?

我不清楚是否可以通过将临时对象绑定(bind)到?:表达式中的常量引用来延长临时对象的生命周期:classFoo{...};Foo*someLValue=...;constFoo&=someLValue?*someLValue:Foo();通过调用默认构造函数Foo()创建的临时对象的生命周期是否通过将其绑定(bind)到本地constref来延长,即使绑定(bind)是有条件的?还是因为Foo()的临时值会在?:表达式的末尾被销毁,所以这会创建一个悬空引用? 最佳答案 在此代码中,条件运算符的第二个和第三个操作数具有不同的值类别(

c++ - 从括号内的 initializer_list 构造时调用了错误的重载

我一直认为当我使用初始化列表C++语法时:something({...});编译器总是很清楚我想调用采用std::initializer_list的重载,但对于MSVC2015似乎不太清楚。我测试了这个简单的代码:#include#includenamespacetesting{templatestructTest{Test(){printf("Test::Test()\n");}explicitTest(size_tcount){printf("Test::Test(int)\n");}Test(std::initializer_listinit){printf("Test::Tes

c++ - 为什么 set::find 不是模板?

使用来自的模板函数你可以这样做structfoo{intbar,baz;};structbar_less{//comparefoowithfoobooloperator()(constfoo&lh,constfoo&rh)const{returnlh.bar//comparesomeTwithfoobooloperator()(Tlh,constfoo&rh)const{returnlh//comparefoowithsomeTbooloperator()(constfoo&lh,Trh)const{returnlh.barbaz;}在std::set类似find的方法你必须传递一个s

c++ - G++ 4.5 错误 : No diagnostic for narrowing in initializer list

我尝试了以下代码:intmain(){intx{23.22};}其中包括需要缩小的初始化,但代码编译正常,没有任何错误或警告。另一方面,以下代码给出了错误:intmain(){intx[]{23.22};}我是发现了错误还是什么?PS:我目前使用的是GCC4.5.0 最佳答案 看起来像一个错误。以下直接来自n3092草案:8.5.4List-initialization—Otherwise,iftheinitializerlisthasasingleelement,theobjectisinitializedfromthatelem

c# - C#<->C++ DLLImport "Attempted to read or write protected memory."问题

我有一个C++dll,其中有一个函数,我试图从C#应用程序调用。这是C++头文件中的代码extern"C"_declspec(dllexport)intLabelStoringSSDsim(intdevNum,UCHARserial[40],UCHARwwn[40],UCHARConfigID[5],UCHARFrmRev[8],UCHARDevName[40],inteCode);这是C++源文件中的代码intLabelStoringSSDsim(intdevNum,UCHARserialLbl[40],UCHARwwnLbl[40],UCHARConfigID[5],UCHARFr

c++ - 错误 C2678 : binary '=' : no operator found which takes a left-hand operand of type 'const Recipe' (or there is no acceptable conversion)

我正在尝试对每个元素中包含一个int和一个字符串的vector进行排序。它是一个称为vector食谱的类类型的vector。出现上述错误,这是我的代码:在我的Recipe.h文件中structRecipe{public:stringget_cname()const{returnchef_name;}private:intrecipe_id;stringchef_name;在我的Menu.cpp文件中voidMenu::show()const{sort(recipes.begin(),recipes.end(),Sort_by_cname());}在我的Menu.h文件中#include

c++ - 主区域 : "master region may not be closely nested inside of work-sharing or explicit task region" 的 OpenMP for 循环

我有以下代码,我认为它应该显示一个进度条来近似整个过程的进度(因为循环的每个并行线程应该以大致相同的速度进行)#pragmaompparallelforfor(longintx=0;x但是,我收到以下错误:warning:masterregionmaynotbecloselynestedinsideofwork-sharingorexplicittaskregion[enabledbydefault]现在,当我运行代码时,我确实得到了想要的结果。但我不喜欢警告。为什么这会给我一个警告,是否有更好的方法来完成此操作?谢谢! 最佳答案

c++ - 如果用户使用 Rice 在 Ruby 中重新定义 initialize(),则避免 C++ 代码中的段错误

在为Ruby编写C++扩展时,我一直在努力解决的一个问题是,即使用户做了愚蠢的事情,也要让它真正安全。那时他应该得到异常,但绝不是SegFault。一个具体的问题如下:我的C++类有一个非平凡的构造函数。然后我使用RiceAPI来包装我的C++类。如果用户在他的Ruby代码中重新定义了initialize(),那么Rice创建的initialize()函数就会被覆盖,对象既不会被分配也不会被初始化。一个玩具示例如下:classPerson{public:Person(conststring&name):m_name(name){}conststring&name()const{retu

c++ - 如何使用 Eigen 3 表达 "<array-of-true-or-false> = <array> <= <scalar>"?

我正在使用Eigen3模板库将一些MATLAB代码移植到C++,我正在为这个常见问题寻找一个好的映射MATLAB习惯用法:K>>[12345]因此,比较数组和标量,返回具有相同形状的bool数组。我知道Eigen的Array类有系数比较运算符,但如果我正确地解释了文档,它们只适用于另一个数组;不是标量值。是否有一些我错过的选项可以执行与标量的比较?还是失败了,一个很好的惯用方法来创建一个形状适当的Array填充表达式RHS的标量值? 最佳答案 感谢#eigenIRCchannel的ChriSopht_:VectorXdcompare

c++ - 数组作为模板参数 : stack or heap?

与堆相比,我对堆栈的了解非常初级,但是当涉及到数组时,据我所知,在堆栈上创建了这样的东西floatx[100];而像这样的东西是在堆上创建的float*x=newfloat[100];但是,如果我创建一个模板数组类,并以“堆栈”数组类型(如float[100])传递它,会发生什么情况?示例:#includeusingnamespacestd;templateclassArray{public:intsize;T*data;Array(intsize_):size(size_){data=newT[size];}~Array(){delete[]data;}};intmain(){int