草庐IT

non-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++ - 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++ - && 在 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++ - 为什么不能将不完整的类型转换为 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++ - 将 lambda 传递给 void 指定模板失败

我尽可能地简化了问题,所以这里是有问题的函数:classTest{public:templatevoidExecuteFunction(std::functionf){}};如果我用int类型调用函数,一切正常,但是,如果我用void类型的lambda调用它,它就不再编译了。Testtest;test.ExecuteFunction(//doesn'tcompile[](void)->void{inti=5;});test.ExecuteFunction(//thiscompiles[](int)->void{inti=5;});编译器错误:ErrorC2672'Test::Execu

c++ - g++ "declaration of "运算符<<"as non-function"

我们有一个自定义的Logging类,它在VisualStudio2010中编译良好,但在Linux上使用g++编译时会抛出错误。我们收到的错误消息如下:Logger.hpp:84:error:declarationof"operator各自的代码行如下:/*:84*/inlineLogger&operatoroutput){if(this->loggingEnabled())std::coutoutput){if(this->loggingEnabled())std::cout>&(*StdEndl)(std::basic_ostream>&);inlineLogger&operato

c++ - 为什么在 C++ 中键入 void main() 是不好的

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Differencebetweenvoidmainandintmain?为什么是voidmain(){//returnvoid}不好吗?前几天我输入了这个,有人向我指出这样做是错误的。我很困惑。我这样写已经有一段时间了,我知道它不是C++标准,但编译器不会发出任何警告。为什么这是错误的?

c++ - 如何在 C++ 中调用 void foo(int (&)[]) {}?

voidf1(int(&)[8]){}voidf2(int(&)[]){}intmain(){inta[8];f1(a);//OKf2(/*WhatshouldIputhere?*/);//???return0;}如何调用f2?PS:voidf2(int(&)[]){}在VC++2012下是合法的。考虑以下几点:templatestructA{};templatestructA{};templatestructA{}; 最佳答案 C++有一个明确的规则,不允许将没有边界的数组引用或指针作为参数(但这些是其他有效类型)。以下将是此类参

c++ - (void)变量的意义

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Whatdoesvoidcastingdo?我刚刚浏览了一个项目,发现了这个//Thisisina.cppfile#ifxxx==5(void)var;#endif这个(void)var有什么作用?这样做有什么意义。我听说这与编译有关。添加c和cpp标签以防这种情况很常见。