草庐IT

int_void

全部标签

c++ - 使用指针作为循环增量器而不是通常的 "int i"是个坏主意吗?

这方面的一个例子是:charstr[]="Hello";intstrLength=strlen(str);for(char*pc=str;pc编辑:解决了写保护内存问题。 最佳答案 我的一个问题是,如果您在for循环中省略*in*pc,您将获得很多乐趣。哎呀?更一般地说,要区分重新分配指针和修改值之间的区别稍微有点困难。但是,(虽然我手边没有),Stroustroup本人在C++编程语言一书中赞同(参见编辑)指针迭代。基本上,您可以使用指针算法在两个char数组之间实现非常简洁的字符串比较。简而言之,我建议以“只读”方式使用此类指针

c# - C# 中的 void* 是什么?

想要改进此帖子?提供此问题的详细答案,包括引用和对答案正确原因的解释。不够详细的答案可能会被编辑或删除。这个问题在这里已经有了答案:Whatisvoid**inC#?(6个答案)关闭9年前。我正在查看VC++6.00程序的源代码。我需要将此源代码转换为C#,但我无法理解此示例中的(void*)是什么?glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,IMAGE_WIDTH,IMAGE_HEIGHT,0,PIXEL_FORMAT,GL_UNSIGNED_BYTE,(void*)imageData);在这段代码中imagedata是一个指针byte*图像数据

c++ - 错误 : call of overloaded ‘max(int, int)’ is ambiguous

#includeusingnamespacestd;templateTmax(Tlhs,Trhs){returnlhsintmax(intlhs,intrhs){returnlhs(4,5)如何更正此错误? 最佳答案 这都是因为你的usingnamespacestd;。删除该行。通过该using指令,您将std::max(必须通过iostream以某种方式包含)带入全局范围。因此,编译器不知道调用哪个max-::max或std::max。我希望这个例子对于那些认为使用指令是免费的的人来说是一个很好的稻草人。奇怪的错误是一种副作用。

c++ - : (int) blabla * 255. 99999999999997 或 round(blabla*255) 常识正确的是什么?

最近我在webkit资源中发现了这个有趣的东西,与颜色转换(hsl到rgb)有关:http://osxr.org/android/source/external/webkit/Source/WebCore/platform/graphics/Color.cpp#0111constdoublescaleFactor=nextafter(256.0,0.0);//it'sheresomethinglike255.99999999999997//..somecodeskippedreturnmakeRGBA(static_cast(calcSomethingFrom0To1(blablabl

c++ - 我可以举一个现实生活中的例子,其中通过 void* 进行强制转换而 reinterpret_cast 无效吗?

有一组关于交叉转换的问题(从T1*转换为不相关的T2*),例如this和this.答案通常是这样的:reinterpret_cast是实现定义的,转换为void*后跟static_cast是明确定义的。然而,我还没有看到使用reinterpret_cast时可能出错的任何真实示例。通过void*进行强制转换而reinterpret_cast无效的真实示例有哪些? 最佳答案 real-lifeexampleswherecastingthroughvoid*worksandreinterpret_castdoesn't如果我将这句话解释

c++ - 为什么 64 位 GCC 在分配数组时警告将 const int 转换为 long unsigned int?

我有一个如下所示的文件test.cpp:voidf(constintn){unsignedchar*a=newunsignedchar[n];delete[]a;}intmain(){f(4);return0;}使用-Wsign-conversion在64位GCC中编译它标志产生警告:test.cpp:2:39:warning:conversionto‘longunsignedint’from‘constint’maychangethesignoftheresult[-Wsign-conversion](第2行是调用new的行)。我觉得GCC应该发出关于分配数组的警告似乎很奇怪,但下面

c++ - 运算符优先级(bool 之前是否为 void*?)

回答thisquestion时我做了一些让我很困惑的研究。我注意到两个成功打开的ifstreams不相等,但两个失败的ifstreams相等。起初我检查了cplusplus.com。operator!返回badbit和failbit的状态。我认为与此相反的仍然是返回这两位的状态,但是翻转了。错误,因为两次成功调用不相等。然后我认为它是某个地方的operatorbool会返回一些东西。所以我试图从ifstream回溯并找到istream::operatorbool(),它正在返回_Ok。但还是错了,这似乎根本没有被调用(也不可能,因为两次成功的调用仍然不相等)。所以我改变了方法并检查了V

c++ - SFINAE: 'static_cast<void>()' 或 ', void()'?

在任意类型上执行SFINAE时,通常需要将表达式的结果转换为void。我见过两种方法;转换为无效:(void)(expr)//orstatic_cast(expr)或者,或者,使用带有voidprvalueRHS的逗号运算符:(expr),void()据我了解,在这两种情况下,expr都会被求值(为了格式良好,在非求值上下文中)并丢弃结果(或结果类型,在非求值上下文中);在任何一种情况下,即使是病态类T也无法覆盖T::operatorvoid()或operator,(T,void)。(参见:Whyis"operatorvoid"notinvokedwithcastsyntax?、Wha

c++ - extern "C"static void* 函数

在阅读了extern和static之后,我很困惑地遇到了具有以下行的代码:extern"C"staticvoid*foo(int*a){returnfoo1(a);}为什么这不会产生任何错误? 最佳答案 以下内容也编译并执行与您的行相同的操作:extern"C"{staticvoid*foo(int*a){returnfoo1(a);}}static意味着foo()将只在文件范围内可用,当它出现时它会覆盖extern"C"到联动。通常,extern"C"会影响链接器在导出时使用的函数的名称,以便在链接整个程序时可以从其他目标文件调用

c++ - "char"和 "small int"比 "int"慢吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Performanceofbuilt-intypes:charvsshortvsintvs.floatvs.double嗨。假设您拥有32位处理器。8位char和16位shortint类型是否比native32位int慢?使用64位longlongint怎么样?默认情况下硬件是否支持这种数据类型,还是通过使用额外的指令将它们全部转换为32位数据?如果我必须存储少量字符,将它们存储为整数不是更快吗?