草庐IT

cross-cast

全部标签

c++ - 为什么 static_cast(*this) 到基类会创建一个临时拷贝?

我正在阅读EffectiveC++并遇到了这个例子:classWindow{//baseclasspublic:virtualvoidonResize(){...}//baseonResizeimpl...};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thistoWindow,//thencallitsonResize;//thisdoesn'twork!.../

c++ - static_cast<int>(foo) 与 (int)foo

有人能详细说明一下区别吗? 最佳答案 不同之处在于(int)foo可以表示六种不同的东西。它可能是一个static_cast(在静态已知类型之间转换),它可能是一个const_cast(添加或删除const-ness),或者它可能是一个reinterpret_cast(在指针类型之间转换)编译器会尝试每一个,直到找到一个可以工作的。这意味着它可能不会总是选择您期望的那个,因此它可能会成为一个微妙的错误来源。此外,static_cast更容易搜索或进行搜索/替换。 关于c++-static

C++ static_cast 运行时开销

请看下面的代码。a)在这种情况下(简单继承,没有虚拟成员),B::df()中的静态转换是否有任何开销(无论如何)?我发现了一些类似问题的相互矛盾的答案,这就是我问的原因......b)我正在考虑将A中的constM1*func设为私有(private),并在B中引入一个新的私有(private)字段constM2*func以避免强制转换,但它有点使事情复杂化并使智能指针的使用更加困难。你有没有更好的方法来避免Actor阵容?classM1{public:doublef()const;};classM2:publicM1{public:doubledf()const;};classA{p

c++ - const_cast 和 std::move 从非引用中删除常量

我有一个无法修改的外部库。该库声明了一个模板函数,由于某种原因返回const非引用对象:templateconstCfoo();我还有另一个无法修改的外部库。该库声明了一个不可复制的类,并且仅具有来自非常量对象的move构造函数:structbar{bar();bar(constbar&)=delete;bar(bar&&);};现在我需要使用foo.一个简单的用法:barbuz(){returnfoo();}失败main.cpp:Infunction'barbuz()':main.cpp:13:21:error:useofdeletedfunction'bar::bar(constb

用于类比较的 C++ dynamic_cast vs typeid

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++equivalentofinstanceof我想知道dynamic_cast和typeid之间的区别仅在于类比较(除了dynamic_cast允许访问子类的方法和typeid仅对类比较有用)。我发现一个两年前的StackOverflow也在问同样的问题:C++equivalentofjava'sinstanceof.但是,它已经有两年了,我不想删除旧帖子(我不确定typeid什么时候出来),所以我想重新问同样的问题,但略有不同。基本上,我有类A和类B,它们都是抽象类C的子类。类C被作为方法的参数接收,我

c++ - unique_ptr 的 static_pointer_cast 的替代方案

我了解将static_pointer_cast与unique_ptr一起使用会导致所包含数据的共享所有权。换句话说,我想做的是:unique_ptrfoo=fooFactory();//dosomethingforawhileunique_ptrbar=static_unique_pointer_cast(foo);无论如何,这样做会导致两个unique_ptr永远不应该同时存在,所以它是被禁止的。是的,这是有道理的,绝对是,这就是为什么确实不存在像static_unique_pointer_cast这样的东西。到目前为止,如果我想存储指向这些基类的指针,但我还需要将它们强制转换为一些

c++ - g++ -Wall 没有关于 double-> int cast 的警告

在以下代码段中,不会产生任何警告。g++4.4.3-Wall-pedantic//fisvoidf(int);f(3.14);doubled=3.14;inti=d+2;我强烈记得这是一个警告,类似于“可能丢失精度”。是被删除了还是我的内存在欺骗我?如何在g++中将其变成警告?我觉得这是一个有用的警告,还是一个坏主意?我什至在http://gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Warning-Options.html上都找不到合适的东西 最佳答案 $gcc-Wconversiontest.ctes

C++:使用 boost::dynamic_pointer_cast 时出现 "... is not a polymorphic type"

为什么我会收到以下代码的以下错误?1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(259):errorC2683:'dynamic_cast':'my_namespace::A'isnotapolymorphictype1>D:\[location]\[header_filename].h(35):seedeclarationof'my_namespace::A'1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(522):seereferencetofunctiontempla

c++ - static_cast 与 dynamic_cast

这个问题在这里已经有了答案:关闭13年前.PossibleDuplicate:Regularcastvs.static_castvs.dynamic_cast我不太明白何时使用静态类型转换和何时使用动态类型转换。请问有什么解释吗? 最佳答案 从基类类型转换为派生类类型时使用dynamic_cast。它检查被强制转换的对象实际上是派生类类型,如果对象不是所需类型,则返回一个空指针(除非你正在强制转换为引用类型——然后它会抛出一个bad_cast异常)。如果不需要此额外检查,请使用static_cast。正如Arkaitz所说,由于dy

node.js - Laravel 5.4 ‘cross-env’ 未被识别为内部或外部命令

我正在尝试为LaravelMix运行npmrundev,但出现此错误:>@devD:\projects\ptcs>cross-envNODE_ENV=developmentwebpack--progress--hide-modules--config=node_modules/laravel-mix/setup/webpack.config.js'cross-env'isnotrecognizedasaninternalorexternalcommand,operableprogramorbatchfile.npmERR!codeELIFECYCLEnpmERR!errno1npmER