草庐IT

c++ - 在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

static_cast和reinterpret_cast似乎都可以很好地将void*转换为另一种指针类型。是否有充分的理由偏爱其中一个? 最佳答案 使用static_cast:它是准确描述此处进行的转换的最窄类型。有一种误解,认为使用reinterpret_cast会更好,因为这意味着“完全忽略类型安全,只是从A转换为B”。但是,这实际上并没有描述reinterpret_cast的效果。相反,reinterpret_cast有多种含义,所有含义都认为“reinterpret_cast执行的映射是实现定义的”。[5.2.10.3]但在

c++ - 在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

static_cast和reinterpret_cast似乎都可以很好地将void*转换为另一种指针类型。是否有充分的理由偏爱其中一个? 最佳答案 使用static_cast:它是准确描述此处进行的转换的最窄类型。有一种误解,认为使用reinterpret_cast会更好,因为这意味着“完全忽略类型安全,只是从A转换为B”。但是,这实际上并没有描述reinterpret_cast的效果。相反,reinterpret_cast有多种含义,所有含义都认为“reinterpret_cast执行的映射是实现定义的”。[5.2.10.3]但在

c++ - 为什么不可能有对void的引用?

为什么不能引用void?我在C++标准中找到的唯一内容是这一行,位于8.3.2.1Adeclaratorthatspecifiesthetype"referencetocvvoid"isill-formed.为什么会这样?为什么我不能编写一个接受void&的“通用”函数?为了清楚起见,我没有想到使用引用到void可能比使用模板更好的有用应用程序,但我只是对禁止这种构造的理由感到好奇。为了澄清一点,我知道“按原样”使用指向void的引用与取消引用指向void的指针一样毫无意义。但是,我可以将它转换为对-sometype的引用以便使用它,不是吗?事实上,我不明白为什么下面的代码片段可以工作

c++ - 为什么不可能有对void的引用?

为什么不能引用void?我在C++标准中找到的唯一内容是这一行,位于8.3.2.1Adeclaratorthatspecifiesthetype"referencetocvvoid"isill-formed.为什么会这样?为什么我不能编写一个接受void&的“通用”函数?为了清楚起见,我没有想到使用引用到void可能比使用模板更好的有用应用程序,但我只是对禁止这种构造的理由感到好奇。为了澄清一点,我知道“按原样”使用指向void的引用与取消引用指向void的指针一样毫无意义。但是,我可以将它转换为对-sometype的引用以便使用它,不是吗?事实上,我不明白为什么下面的代码片段可以工作

java - 而(真);当不在 void 中时,循环会抛出无法访问的代码

我正在用java做一些小程序。我知道如果我写while(true);程序将卡住在这个循环中。如果代码是这样的:测试1:publicclassWhile{publicstaticvoidmain(String[]args){System.out.println("start");while(true);System.out.println("end");}}编译器向我抛出错误:Exceptioninthread"main"java.lang.Error:Unresolvedcompilationproblem:UnreachablecodeatWhile.main(While.java:

java - 而(真);当不在 void 中时,循环会抛出无法访问的代码

我正在用java做一些小程序。我知道如果我写while(true);程序将卡住在这个循环中。如果代码是这样的:测试1:publicclassWhile{publicstaticvoidmain(String[]args){System.out.println("start");while(true);System.out.println("end");}}编译器向我抛出错误:Exceptioninthread"main"java.lang.Error:Unresolvedcompilationproblem:UnreachablecodeatWhile.main(While.java:

c++ - "typedef void (*Something)()"是什么意思

我试图理解这意味着什么,我正在查看的代码有在.htypedefvoid(*MCB)();staticMCBm_process;在.C中MCBModes::m_process=NULL;有时当我这样做时m_process();我得到段错误,可能是因为内存被释放了,当它被释放时我该如何调试? 最佳答案 它定义了一个指向函数的类型。函数返回void,参数列表未指定,因为问题(当前,但可能错误地)标记为C;如果它被标记为C++,那么该函数将根本不接受任何参数。要使其成为不带参数的函数(在C中),您可以使用:typedefvoid(*MCB)

c++ - "typedef void (*Something)()"是什么意思

我试图理解这意味着什么,我正在查看的代码有在.htypedefvoid(*MCB)();staticMCBm_process;在.C中MCBModes::m_process=NULL;有时当我这样做时m_process();我得到段错误,可能是因为内存被释放了,当它被释放时我该如何调试? 最佳答案 它定义了一个指向函数的类型。函数返回void,参数列表未指定,因为问题(当前,但可能错误地)标记为C;如果它被标记为C++,那么该函数将根本不接受任何参数。要使其成为不带参数的函数(在C中),您可以使用:typedefvoid(*MCB)

c++ - 为什么编译器更喜欢 f(const void*) 而不是 f(const std::string &)?

考虑以下代码:#include#include//voidf(constchar*){std::cout我使用g++(Ubuntu6.5.0-1ubuntu1~16.04)6.5.020181026编译了这个程序:$g++-std=c++11strings_1.cpp-Wall$./a.outconstvoid*请注意,注释是为了测试而存在的,否则编译器会使用f(constchar*)。那么,为什么编译器会选择f(constvoid*)而不是f(conststd::string&)? 最佳答案 转换为std::string需要“用户

c++ - 为什么编译器更喜欢 f(const void*) 而不是 f(const std::string &)?

考虑以下代码:#include#include//voidf(constchar*){std::cout我使用g++(Ubuntu6.5.0-1ubuntu1~16.04)6.5.020181026编译了这个程序:$g++-std=c++11strings_1.cpp-Wall$./a.outconstvoid*请注意,注释是为了测试而存在的,否则编译器会使用f(constchar*)。那么,为什么编译器会选择f(constvoid*)而不是f(conststd::string&)? 最佳答案 转换为std::string需要“用户