草庐IT

Implicit_cast

全部标签

c++ - 使 : implicit rule to link c++ project

我正在学习制作教程。我正在尝试构建的非常简单的测试项目只有3个文件:./src/main.cpp./src/implementation.cpp和./include/header.hpp这是制作文件。VPATH=srcincludeCPPFLAGS=-Iincludemain:main.oimplementation.omain.o:header.hppimplementation.o:header.hpp在不带任何参数的情况下调用ma​​ke仅构建目标文件,但不链接可执行文件。prog应该有一个隐含的规则,或者我错过了什么?我真的需要有人为我指明正确的方向。谢谢。我使第一个目标名称与

c++ - 用 static_cast<int> 舍入?

我觉得问这个真的很傻,因为我知道如何做101种方法,但不知道书中定义的方法。(注意,我懂C++)到目前为止,我们只介绍了C++的基础知识。所以基本上,我们知道变量、赋值和基本转换。在书中我遇到了这部分问题:提示用户输入十进制数将该数字转换为最近的整数并将其打印到屏幕上所以我有简单的代码:doublen;cout>n;cout(n)但我意识到这对我不起作用。它总是会截断小数点,以便1.9->1而不是预期的1.9->2如何仅使用我“知道”的内容来解决此问题?(如,没有round()或if语句等)这是标准合规问题吗?在学校我以为我在WindowsXP32位上使用VisualC++2005有类

c++ - 是否有 "safe"static_cast 替代方案?

C++11/14中的static_cast或实现此功能的库是否有“安全”替代方案?我所说的“安全”是指强制转换应该只允许不丢失精度的强制转换。因此,从int64_t到int32_t的转换只有在数字适合int32_t时才被允许,否则会报告错误。 最佳答案 有gsl::narrownarrow//narrow(x)isstatic_cast(x)ifstatic_cast(x)==xoritthrowsnarrowing_error 关于c++-是否有"safe"static_cast替代方

c++ - 避免 dynamic_cast 的模式

我有一个类:classA{public:virtualvoidfunc(){…}virtualvoidfunc2(){…}};还有一些派生类,比如B、C、D...在95%的情况下,我想遍历所有对象并调用func或func2(),因此我将它们放在一个vector,例如:std::vector>myVec;…for(autoit=myVec.begin();it!=myVec.end();++it)(*it).func();但是,在其余5%的情况下,我想根据它们的子类对类做一些不同的事情。我的意思是完全不同的,比如调用带有其他参数的函数,或者根本不调用某些子类的函数。我已经想到了一些解决这

c++ - dynamic_cast 的正确用例是什么?

我多次被告知(并且在实践中看到我自己)使用dynamic_cast通常意味着糟糕的设计,因为它可以而且应该用虚函数代替。例如,考虑以下代码:classBase{...};classDerived:publicBase{...};...Base*createSomeObject();//MightcreateaDerivedobject...Base*obj=createSomeObject();if(dynamic_cast(obj)){//dostuffinoneway}else{//dostuffinsomeotherway}可以很容易地看出,我们可以将一个虚函数doStuff()

c++ - shared_dynamic_cast 和 dynamic_pointer_cast 的区别

谁能给我解释一下:shared_dynamic_cast和dynamic_pointer_cast来自Boost库?在我看来它们可能是等价的。 最佳答案 给定一个shared_ptr,这两个函数确实是等价的。区别在于shared_dynamic_cast仅适用于shared_ptr的,而dynamic_pointer_cast适用于任何类型的指针(通过重载)。这使您可以对任何指针concept执行动态转换,而不管该指针实际上是如何构成的:#include#includestructfoo{};structbar:foo{voidf(

c++ - 如何使用 boost::lexical_cast 和 std::boolalpha?即 boost::lexical_cast< bool > ("true")

我已经看到其他boost::lexical_cast问题的一些答案,这些问题断言以下是可能的:boolb=boost::lexical_cast("true");这不适用于g++4.4.3boost1.43。(也许它确实适用于默认设置std::boolalpha的平台)This是字符串到bool问题的一个很好的解决方案,但它缺少boost::lexical_cast提供的输入验证。 最佳答案 除了答案形式poindexter之外,您还可以将here中的方法包装起来。在boost::lexical_cast:的特殊版本中namespa

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