草庐IT

void-compatibility

全部标签

c++ - 动态转换为 void 指针有实际用途吗?

在C++中,Tq=dynamic_cast(p);构造执行指针的运行时转换p指向其他指针类型T必须出现在*p的动态类型的继承层次结构中为了成功。这一切都很好。但是,也可以执行dynamic_cast(p),它将简单地返回一个指向“最派生对象”的指针(参见C++11中的5.2.7::7)。我知道这个功能在动态转换的实现中可能是免费的,但它在实践中有用吗?毕竟它的返回类型充其量是void*,那这有什么好处呢? 最佳答案 dynamic_cast()确实可以用来检查身份,即使处理多重继承。试试这个代码:#includeclassB{pub

c++ - 为什么 std::transform 和类似的东西将 'for' 循环增量转换为 (void)?

下面代码中(void)++__result的作用是什么?std::transform的实现://std::transformtemplateinline_LIBCPP_INLINE_VISIBILITY_OutputIteratortransform(_InputIterator__first,_InputIterator__last,_OutputIterator__result,_UnaryOperation__op){for(;__first!=__last;++__first,(void)++__result)*__result=__op(*__first);return__r

c++ - void *p = &&abc; 中的 && 是什么意思

我遇到了一段代码void*p=&&abc;。&&这里的意义是什么?我知道右值引用,但我认为在这种情况下使用的&&是不同的。&&在void*p=&&abc;中表示什么? 最佳答案 &&isgcc'sextension获取当前函数中定义的标签的地址。void*p=&&abc在标准C99和C++中是非法的。This用g++编译。 关于c++-void*p=&&abc;中的&&是什么意思,我们在StackOverflow上找到一个类似的问题: https://stac

c# - 为什么 API 应该返回 'void' ?

在编写API或可重用对象时,是否有任何技术原因导致所有返回“void”的方法调用不应只返回“this”(C++中的*this)?例如,使用字符串类,我们可以做这样的事情:stringinput=...;string.Join(input.TrimStart().TrimEnd().Split("|"),"-");但我们不能这样做:string.Join(input.TrimStart().TrimEnd().Split("|").Reverse(),"-");..因为Array.Reverse()返回void。还有许多其他示例,其中API有很多返回void的操作,所以代码最终看起来像:

c# - 为什么 API 应该返回 'void' ?

在编写API或可重用对象时,是否有任何技术原因导致所有返回“void”的方法调用不应只返回“this”(C++中的*this)?例如,使用字符串类,我们可以做这样的事情:stringinput=...;string.Join(input.TrimStart().TrimEnd().Split("|"),"-");但我们不能这样做:string.Join(input.TrimStart().TrimEnd().Split("|").Reverse(),"-");..因为Array.Reverse()返回void。还有许多其他示例,其中API有很多返回void的操作,所以代码最终看起来像:

objective-c - Objective-C 中 `oneway void` 的用例?

我在NSObject.h中发现了一个奇怪的关键字-(onewayvoid)release;我在网上搜索了一下,了解到它与异步消息传递有关,看起来和Erlang的消息传递很相似。看来这可以做出很多有趣的事情。这个关键字有哪些好的用例? 最佳答案 oneway与分布式对象API一起使用,它允许在不同线程或应用程序之间使用Objective-C对象。它告诉系统在方法返回之前它不应该阻塞调用线程。没有它,调用者将阻塞,即使方法的返回类型是void。显然,它永远不会与void以外的任何东西一起使用,因为这样做意味着该方法返回了一些东西,但调用

c++ - 为什么 std::shared_ptr<void> 工作

我发现一些代码使用std::shared_ptr在关机时执行任意清理。起初我认为这段代码不可能工作,但后来我尝试了以下方法:#include#include#includeclasstest{public:test(){std::cout>">v;{std::cout(newtest()));std::cout这个程序给出了输出:Atbeginofmain.creatingstd::vector>CreatingtestTestcreatedLeavingscopeLeavingmainTestdestroyed我对为什么这可能有效有一些想法,这与为G++实现的std::shared_

c++ - 为什么这个 C++ 片段编译(非 void 函数不返回值)

这个问题在这里已经有了答案:Whydoesflowingofftheendofanon-voidfunctionwithoutreturningavaluenotproduceacompilererror?(11个回答)关闭6年前。今天早上我在我的一个图书馆里发现了这个:statictvec4Min(consttvec4&a,consttvec4&b,tvec4&out){tvec3::Min(a,b,out);out.w=min(a.w,b.w);}我预计会出现编译器错误,因为此方法不返回任何内容,并且返回类型不是void。唯一想到的两件事是在调用此方法的唯一地方,没有使用或存储返回

c++ - `void_t` 是如何工作的

我在Cppcon14上观看了WalterBrown关于现代模板编程(PartI,PartII)的演讲,他展示了他的void_t。SFINAE技术。示例:给定一个计算结果为void的简单变量模板如果所有模板参数格式正确:templateusingvoid_t=void;以及以下用于检查名为member的成员变量是否存在的特征:templatestructhas_member:std::false_type{};//specializedashas_memberordiscarded(sfinae)templatestructhas_member>:std::true_type{};我试图

c++ - 为什么在不返回值的情况下从非 void 函数的末尾流出不会产生编译器错误?

自从我多年前意识到,默认情况下这不会产生错误(至少在GCC中),我一直想知道为什么?我知道您可以发出编译器标志来产生警告,但它不应该总是错误吗?为什么非void函数没有返回值是有效的?评论中要求的示例:#includeintstringSize(){}intmain(){charcstring[5];printf("thelastcharis:%c\n",cstring[stringSize()-1]);return0;}...编译。 最佳答案 C99和C++标准要求非void返回值的函数,main除外.main中缺少的return