草庐IT

non-void

全部标签

c++ - 来自 Xcode 8.3.2 : Non-portable path to file - specified path differs in case from file name on disk 的错误警告

出于某种原因,我的代码库突然开始收到数以千计的此类警告。但到目前为止,所有有问题的文件和路径都是完全正确的,与我在磁盘上看到的与Finder相匹配。他们是不是在暗地里另有幕后?当问题实际上并不存在时,为什么Xcode会生成这些警告?尽管http://stackoverflow.com/questions/43067017/non-portable-path-to-file-file-h-specified-path-differs-in-case-from-file-na是关于相同的警告,在这种情况下我已经验证导入路径与磁盘上的文件名匹配。 最佳答案

c++ - 应该如何使用 const/non-const 参数重载函数?

我有以下代码://stringspecializationsvoidfoo(constchar*a,constchar*b);voidfoo(constchar*a,conststd::string&b);voidfoo(conststd::string&a,constchar*b);voidfoo(conststd::string&a,conststd::string&b);//genericimplementationtemplatevoidfoo(TAa,TAb){...}问题是这个测试用例:chartest[]="test";foo("test",test);最终调用了foo的

c++ - 有没有办法停止隐式指针转换为 void *

我需要在我的源代码中找到所有这样的地方,其中任何类型的指针被隐式转换为void*或停止这些隐式转换的方法。例如:int*到void*char*到void*Base*到void*是否有任何gcc警告或错误标志检测所有此类指针被隐式转换为void*的行? 最佳答案 假设你有一个像这样的简单程序#includeintmain(){char*apples="applesandpears";charfruit[1024];void*avoid;intaint;floatafloat;avoid=&aint;avoid=&afloat;memc

c++ - "enumeral and non-enumeral type in conditional expression"背后的推理

自C++11过渡以来,GCC输出警告“条件表达式中的枚举和非枚举类型”。我想了解此警告背后的原因。比较枚举常量有什么危险?很明显我们可以通过以下方式摆脱这个警告-Wno-enum-compare通过显式转换为整数类型但为什么这么麻烦?就个人而言,我一直努力编写无警告代码,通常默认发出的警告是非常合理的。例如,它认为比较有符号和无符号整数是危险的。但是使用枚举是广泛使用的惯用C++元编程。我不知道有任何替代方案,它同样具有可读性、简明扼要且不需要任何实际存储空间。举一个具体的例子:下面的元函数会出现什么问题,以至于警告就足够了?templatestructMaxSize;template

c# - 如何从 C# 调用具有 void* 回调和对象参数的 C++ Dll 中的函数

我正在尝试创建一个Cdll的包装器,我正在尝试调用一个函数,该函数采用回调函数,接收一个对象作为传回的指针。.h文件删除externintSetErrorHandler(void(*handler)(int,constchar*,void*),void*data_ptr);处理程序是一个回调函数,在发生错误时调用,data_ptr是传回给您的任何对象(状态),在我的应用程序中就是这个(当前对象)。我能够在使用编码常量类型(如简单类型字符串、整数等)的dll中调用函数。但我不知道如何编码指向作为状态的C#对象的指针。为了将我通过在此处搜索找到的对象引用传递给C函数,否则我似乎需要一个结构

c++ - 如果索引超出范围,如何从 std::tuple_element 返回 void?

我有一个函数特征结构,它使用std::tuple_element提供函数参数的类型:#include#include#includetemplatestructfunction_traits;templatestructfunction_traits{//Numberofarguments.enum{arity=sizeof...(T_Args)};//Argumenttypes.templatestructargs{usingtype=typenamestd::tuple_element>::type;};};intmain(){usingArg0=function_traits::

c++ - 用作模板函数输入的函数的 void 返回值被视为参数

假设你有一些目标类,上面有一些方法:classSubject{public:voidvoidReturn(){std::cout还有一个值类(在概念上类似于Boost.Any):structValue{Value(){}Value(Valueconst&orig){}templateValue(Tconst&val){}};我想使用Subject类中的方法生成一个Value对象:Subjectsubject;Valueintval(subject.intReturn());ValuevoidVal(subject.voidReturn());//compilationerror我在VC

c++ - 为什么允许将 void* 的 static_cast 转换为另一种类型?

我刚刚在读这个帖子:Simplec++pointercasting这让我开始思考为什么不允许在不同指针类型之间进行static_cast(允许的情况除外)除非您将static_cast转换为void*作为中间步骤。在我看来,要么两者都被允许,要么两者都不被允许。这是一个例子:char*cs;unsignedchar*ucs;cs=reinterpret_cast(ucs);//1)allowed,ofcoursecs=static_cast(ucs);//2)notallowed:incompatiblepointertypescs=static_cast(static_cast(uc

c++ - reinterpret_cast<char*>(p) 或 static_cast<char*>((void*)p)) 用于字节指针差异,哪个更好?

在提取用于指针运算的原始字节指针时,以下三种类型转换之间有什么区别吗?(假设char为1个字节的平台。)static_cast((void*)ptr))reinterpret_cast(ptr)(更新)或:static_cast(static_cast(ptr))我应该选择哪个?更详细...给定一个类中两个成员对象的指针,我想计算一个到另一个的偏移量,这样我就可以在给定偏移量的情况下重建一个成员的地址和另一个成员的地址。//assumeddatalayout:structC{//...Aa;//...Bb;}我目前使用的代码是这样的:voidapproach1(A*pa,B*pb){/

c++ - 打印 std::this_thread::get_id() 给出 "thread::id of a non-executing thread"?

这曾经工作得很好(然后外星人一定黑了我的电脑):#include#includeintmain(){std::cout现在它打印thread::idofanon-executingthread。ideone.com打印了一些ID,但有趣的是是什么导致了我平台上的这种行为。$uname-aLinuxxxx3.13.0-77-generic#121-UbuntuSMPWedJan2010:50:42UTC2016x86_64x86_64x86_64GNU/Linux有什么想法吗?编辑:嗯..当我添加std::cout两行打印相同的ID,但是当我删除它时,结果仍然相同-“非执行线程”。