草庐IT

int_void

全部标签

c++ - 将 const void* 指针转换为特定类指针

函数声明如下voidfunc1(constvoid&*pThis){MyClass*pMyClass=static_cast(pThis);//....IusePMyClasspointer.}我遇到错误无法将constvoid*转换为MyClass*这一步怎么做? 最佳答案 你可以MyClass*pMyClass=const_cast(static_cast(pThis));但这个糟糕的语法是一个提示:为什么函数有一个const参数,你不希望它像这样吗voidfunc1(void*pThis){当然,您可以使用C风格的转换来走捷径

c++ - operator++()和operator++(int)有什么区别?

这个问题在这里已经有了答案:Overloading++forbothpreandpostincrement(4个答案)关闭9年前。我有我老师制作的程序中的这些行代码:TimeKeeper&operator++(){d_seconds++;return*this;}constTimeKeeperoperator++(int){TimeKeepertk(*this);++(*this);returntk;}我的老师问我们的问题之一是“operator++()返回一个引用而operator++(int)返回一个值,请解释为什么?”谁能给我解释一下??如果您需要其余的代码,我不介意把它放在上面

c++ - visual studio 中涉及 void*、string 和 const char[] 的意外重载解析

我在visualstudio编译器(在VS2010和VS2012中测试)中遇到了以下意外的重载解析行为。最小的例子:#include#includevoidf(void*){std::cout输出:>f(void*)预期输出:>f(conststd::string&)用GCC编译(用4.6.3测试)生成预期的输出。如果我注释掉f()的“conststd::string&”版本,visualstudio会在没有任何警告的情况下愉快地在/W4上编译,而GCC会发出以下错误(如预期的那样):“来自'constvoid的无效转换*'到'void*'[-fpermissive]”。有谁知道为什么

c++ - 这是什么语法 : "ACGT"[(int)qrand() % 4]

我正在查看Qt特定的C++solution对于典型的生产者/消费者问题。这是生产者的代码:classProducer:publicQThread{public:voidrun(){qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));for(inti=0;i我无法理解for循环中的第二行,即。"ACGT"[*]语法。它具体做什么?这是Qt特定的还是我不知道的C++语法?PS:完整源代码here 最佳答案 它生成一个随机字符:A、C、G、T。Literal"ACGT"是charconst[

c++ - && 在 bitwise_cast<void*>(&&__opcode) 上下文中的含义;

我正在查看下面来自JavascriptCore的代码,但我不知道&&在下面的上下文中的含义。地址的地址没有任何意义。有人可以解释下&&在下面的上下文中的含义吗。(bitwise_cast使用union来避免reinterpret_cast带来的严格别名问题)下面的代码在clang(可能还有gcc)上编译,但不在我们自己专有的C++编译器上编译。可以找到完整的源代码here.#ifENABLE(COMPUTED_GOTO_OPCODES)Opcode*opcodeMap=LLInt::opcodeMap();#defineOPCODE_ENTRY(__opcode,length)\opc

c++ - C++中的int(expr)是什么意思?

在查看friend项目中的一些代码时,我最近看到了类似这样的语法。#includeintmain(){std::cout当您运行上面的代码时,您会得到6,如果使用int功能(如强制转换),这是预期值。但是,我以前从未见过这种语法,也无法在网上找到它的文档。我还做了一个实验,发现这种语法在C中无效。谁能用文档引用解释这个语法的含义? 最佳答案 这不是构造函数调用或“函数”。没有“int函数”。这是函数式转换符号;it'sjustacast.它与(int)(32.5/5)相同(在这种特殊情况下)。而且,不,C没有它。

c++ - 为什么不能将不完整的类型转换为 void?

为什么下面的代码会报如下错误?为什么类型需要完整才能转换为void?structIncomplete;classClass{virtualvoidfoo(Incomplete&incomplete){(void)incomplete;throwstd::logic_error("notimplemented");}};错误:errorC2027:useofundefinedtype'Incomplete'seedeclarationof'Incomplete' 最佳答案 这是C和C++之间的变化,Microsoft以前在C++中实现

c++ - 如何处理 void decltype();

我想创建一个模板来调用另一个对象的成员函数,该对象返回与成员函数相同的类型。在成员函数上使用decltype的语法有点难看,但它似乎适用于除一种情况之外的所有情况。调用如下:structcontainer:map{templateautosafeOperation(stringkey,MemFnPtrTypemfp,_ArgTypes&&...args)->decltype((((C*)nullptr)->*mfp)(args...)){C*pC=NULL;decltype((pC->*mfp)(args...))result;iteratorit=find(key);if(it!=e

c++ - 错误 : invalid conversion from 'const int*' to 'int*'

我想创建一个简单的3x3矩阵类并能够通过下标运算符访问其内容。这是代码://Matrix.hclassMatrix{private:intmatrix[3][3];public:int*operator[](constintindex)const;};//Matrix.cppint*Matrix::operator[](constintindex)const{returnthis->matrix[index];}无论Matrix的对象是常量还是非常量,我都希望能够访问数组的元素。但是我从编译器中得到以下错误:错误:从“constint*”到“int*”的无效转换[-fpermissiv

c++重载具有不同参数的3个函数(int,* int,& int)

所以我有这个作业要做“使用函数重载定义3个具有相同名称但具有不同prams类型(int、int*、int&)的函数,它们将返回值的平方根。”好吧,我做到了,但我不知道它给了我这个错误:“对重载函数的模糊调用”。我尝试修复它但没有成功......这是我的代码,它非常简单:#define_CRT_SECURE_NO_WARNINGS#include#includeusingnamespacestd;doublerad(int);doublerad(int*);doublerad(int&);intmain(){inta,*pt=&a;cin>>a;cout 最佳