草庐IT

Non-declaration

全部标签

C# 到 C 代码 P/INvoke 多个标准 :string declarations lead to stack corruption

我构建了一个带有外部导出的c++dll,以便从我的C#程序中调用它。对于大多数函数,调用工作得很好,但是当我需要将一些字符串从C#传递到C++时会出现问题。我将它们作为普通字符串传递,并作为constchar*接收。它们都很好,所有数据都在那里,但随后我继续从这些char数组中定义了几个字符串。代码继续没有任何问题,直到我退出函数。然后它抛出一个异常,说最后定义的std::string周围的堆栈已损坏,我真的不确定为什么会这样。我尝试了很多定义字符串的方法:复制它们、更改P/Invoke定义的编码。一些额外的信息我从定时器线程调用这个函数;我提到这个是因为我发现,线程上的std::st

c++ - 为什么将 "pointer to pointer to non-const"转换为 "pointer to pointer to const"是不合法的

将非const指针转换为const指针是合法的。那为什么将指向非const的指针转换为指向const的指针是不合法的呢?例如,为什么下面的代码是非法的:char*s1=0;constchar*s2=s1;//OK...char*a[MAX];//akachar**constchar**ps=a;//error! 最佳答案 来自标准:constcharc='c';char*pc;constchar**pcc=&pc;//notallowed*pcc=&c;*pc='C';//wouldallowtomodifyaconstobject

c++ - 使用 "using declaration"扩展非类型模板参数包(模板可变参数编译时 SignalSlot 实现)

对更好的标题有什么建议吗?在Qt中,信号和槽有一个很好的特性。但是,它会告诉您特定信号是否只能在运行时(afc)期间连接到特定插槽。打算:从模板创建一个包含“信号签名”(作为模板参数的函数指针)的类,以允许将给定签名(传递参数的数量和类型)的“插槽”仅连接到具有相似签名的“已定义”信号;必须简单易用。现在的问题:我在ISignalSlotMap类中遇到“使用声明”的编译错误。templatemultiplevariadicinheritancewithvariadicargumenttypes-在这里它编译得很好。还有,有什么办法可以简化模板算法吗?更新:第一个block可以在没有dl

c++ - boost multi_index : retrieve unique values of a non-unique key

我有一个boost::multi_index_container其元素是这样的结构:structElem{Aa;Bb;Cc;};主键(在数据库意义上)是a和b的composite_key。其他键的存在是为了执行各种类型的查询。我现在需要检索一组c的所有不同值。这些值是无论如何不是唯一的,而是遍历所有条目(尽管是有序的),或者使用std::unique似乎很浪费,考虑到c的不同值的数量预计将我是否缺少更有效地获得此结果的简单方法? 最佳答案 我搜索了Boost.MultiIndex文档,但似乎无法找到一种方法来执行您想要的操作。我很想

c++ - CUDA 和模板 : specialization declaration needed?

我有一个模板化包装函数,它调用在.cu文件中定义的内核(__global__)template__global__voidcompute_kernel(T*input,T*output,n){Mm;//computestuffusingm};templatevoidcompute(T*input,T*output,intn){//...computeblocks,threads,etc.compute_kernel>>(input,output,n);//...};和一个头文件包含在只有声明的主机代码中templatevoidcompute(T*input,T*output,intn)

c++ - 为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const

据我了解,以下内容对boost::shared_ptr有效:boost::shared_ptrptr;...boost::shared_ptrc_ptr=ptr;//Valid相同的行为不适用于boost::interprocess::managed_shared_ptr。为什么? 最佳答案 boost::interprocess::managed_shared_ptr实际上不是共享指针;它只是一个辅助类,您可以使用它来定义一个类的类型。来自interprocessdocs:typedefmanaged_shared_ptr::ty

c++ - 非递归(non-recursive) Automake

我正在尝试将项目转换为使用非递归automake。基于对SO的搜索,我可以看到该主题已在一定程度上得到涵盖。但是关于如何将递归automake项目转换为非递归项目,实际上并没有任何问题。我已经读过KarelZak'sblog当然还有autotools-mythbuster.experiencesregardingnon-recursiveautomake有问题但它没有说明如何转换项目。唯一能解释一点的问题似乎是关于subdir-objectsoption.但是我无法用这些资源转换我的项目。因此这个问题。让我们从一个简单的项目设置开始:project/\--configure.ac|--

c++ - 避免接受 lambda 的方法的 const/non-const 重复

classFrame表示像素类型为P的图像.由于底层数据缓冲区格式的多种灵active,遍历其像素的算法并非易事。template//Pispixeltype;RM=is_row_majorclassFrame{//...templatevoiditerate(Ff){//iterateinawaythatisperformantforthisbufferif(stride==(RM?size.w:size.h)){auton=size.area();for(index_tk=0;k(stride)*(RM?size.h:size.w);for(index_tk0=0;k0我希望能够同

c++ - 规则 "A user-defined but do-nothing destructor is also a non-trivial destructor"是否过于严格?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。ImprovethisquestionclassBase{public:~Base(){}private:intval;};Basebase;//aglobalvariable你看,析构函数什么都不做,和c++编译器提供的默认析构函数一样。但是根据帖子Whatisanon-trivialdestructorinC++?,析构函数仍然是一个非平凡的析构函数我知道,标准中的每条规则都必须严格。但是,根据我粘贴的上面的代码,用户定义

c++ - 错误 : control Reaches end of non void function

我正在学习C++,我从教科书上抄了这段代码,在编译代码时,最后出现错误。错误说:ControlReachesendofnon-voidfunction它位于代码的末尾:#include"ComplexNumber.hpp"#includeComplexNumber::ComplexNumber(){mRealPart=0.0;mImaginaryPart=0.0;}ComplexNumber::ComplexNumber(doublex,doubley){mRealPart=x;mImaginaryPart=y;}doubleComplexNumber::CalculateModulu