草庐IT

char_type

全部标签

c# - 通过引用将 char** 从 C# 传递到非托管 C++

这是C#代码。namespaceCameraTest{classProgram{staticvoidMain(string[]args){string[]lst=newstring[10];for(inti=0;i非托管方法是这样的。BOOLWINAPICAM_EnumCameraEx(BOOLbSynchronized,char**ppCameraList,longlMaxCamera,longlMaxCharacter);该方法写入传入的字符串数组。有没有办法从C#调用此方法并让非托管代码能够写入字符串数组? 最佳答案 感谢Re

c++ - boost::lexical_cast<std::string>(Int_Type) 可以抛出吗?

有没有可能boost::lexical_cast(Int_Type)扔?我唯一能想到的是字符串没有内存的地方,但是还有其他更合理的选择吗? 最佳答案 根据documentation,lexical_cast可以扔bad_lexical_cast.最重要的是,正如您已经提到的,可能存在动态分配,它总是会导致bad_alloc异常。编辑:至于具体情况lexical_cast,除了分配错误之外,链上的任何部分似乎都不太可能失败,但文档并不(据我所知)保证不会出现“错误转换”异常。 关于c++-

C++11 : unique_ptr complains about incomplete type, 但是当我包装它时不是

SO上已经有很多关于unique_ptr和不完整类型的问题,但没有一个能给我一个概念来理解为什么以下内容不起作用://error:...std::pair::secondhasincompletetypetemplatestructImpl{typedeftypenamestd::unordered_map>::iteratoriter_type;std::unique_ptrptr;Impl():ptr(newiter_type()){}};intmain(){Impl();return0;}而以下是:templatestructImpl{structWrapper{typedeft

c# - 将 C char[][] 数组编码到 C#

我看了又看,尝试了所有我能想到的或发现的建议。我仍然没有运气获得我需要的数据。我正在使用第三方DLL,我认为它是用C语言编写的。我需要在C#中访问此DLL中的函数。在大多数情况下,我有这个工作,除了一个功能。我遇到问题的函数具有以下header:uintqueryNumOfServers(USHORT*NumOfServers,charServerNames[8][16]);我在我的C#应用程序中声明了以下内容[DllImport("client.dll",CharSet=CharSet.Ansi]publicstaticexternuintqueryNumOfServers(refs

c++ - Type t = Type() 是否调用复制构造函数?

我真的很困惑....Typet=Type()是否调用复制构造函数?我问是因为当我尝试时:#includeclassTest{public:Test(Testconst&){std::cout什么都没有输出,但是当我把它改成#includeclassTest{Test(Testconst&){std::cout我得到:errorC2248:'Test::Test':cannotaccessprivatememberdeclaredinclass'Test'这没有意义(特别是因为这是一个调试版本)。更新:即使这样也可以编译!structTest{Test(Test&&)=delete;Te

c++ - 为什么两次比较 char 变量比一次比较 short 变量更快

我认为一次比较一定比两次比较快。但是经过我的测试,我发现在debug模式下shortcompare要快一点,而在release模式下charcompare要快一些。我想知道真正的原因。以下是测试代码和测试结果。我写了两个简单的函数,func1()使用两个字符比较,func2()使用一个短比较。主函数返回临时返回值以避免编译优化忽略我的测试代码。我的编译器是GCC4.7.2,CPUIntel®Xeon®CPUE5-24300@2.20GHz(VM)。inlineintfunc1(unsignedcharword[2]){if(word[0]==0xff&&word[1]==0xff)re

c++ - 无法声明静态 constexpr char []

我已经阅读了与此问题相关的所有答案,但老实说,我不确定我是否完全理解该解决方案。我正在使用C++11。假设我真的很想声明类似staticconstexprcharvalue[]="foo"的东西.如果我使用NetBeans/TDM_MINGW,我会收到一个错误,我认为这是一个链接错误,报告未定义对“variable_name”的引用。在MSVS2015中尝试相同的代码,我得到“表达式未计算为常量”。一个简单的staticconstexprchar*解决了问题,但我失去了使用像sizeof这样的表达式的能力.简单直接的问题(如果可能直接回答):有没有办法声明一个staticconstex

c++ - 通过直接转换为 char 数组来序列化 POD 数据是否安全?

假设T是一个不包含指针的POD类型,我想序列化T(除了一些其他数据之外)。我创建了以下函数来执行此操作:templatevoidserialize(constT&source,char*&dest){*(T*)dest=source;dest+=sizeof(T);}templatevoiddeserialize(T&dest,char*&source){dest=*(T*)source;source+=sizeof(T);}这会导致任何问题吗,或者是否有任何编译器无法正常工作?换句话说,代码将:templateboolcheck_sanity(constT&obj){std::uni

c++ - 使用 char[] 作为参数、返回等可以解决任何性能问题吗?

首先是为了让C++代码更具可读性;我是编程编译器,我给了它:varswap=(intx,y)=>{//Assignmethodthatreturnstwoints,andgetstwointsasparametertovariablenamedswap.varNewX=yvarNewY=x}varincrement=(intx)=>{varResult=x+1}注意:函数返回首字母大写的任何变量。swap可以像...=swap(x,y).NewX一样使用,但是increment可以像一样使用。..=增量(x)。经过一些优化后,它生成了:(使swap和increment成为实际函数而不是

c++ - "std::string + char"表达式是否创建另一个 std::string?

下面的表达式是否创建了另一个std::string然后将其添加到s1?std::strings1="abc",s2="xyz";s1+=s2+'b';它是否应该防止这种情况(它们无需额外工作就可以添加到s1)?std::strings1="abc",s2="xyz";s1+=s2;s1+='b';这些规则是否也适用于“std::string+std::string”表达式? 最佳答案 所有涉及std::string的重载+运算符都会返回一个新的std::string对象。这是您在youfinallydecipherthereleva