16得票1回答
将int转换为double时,会向上舍入、向下舍入还是四舍五入到最近的double?

简单问题:将一个整数,比如100,转换为双精度浮点数时,会“向上”或“向下”舍入到下一个双精度浮点数,还是总是舍入到最近的一个(最小增量)? 例如,对于static_cast<double>(100): 如果d2 < d1,它会向哪个方向转换? 奖励问题:我是否可以...

16得票4回答
static_cast和Implicit_cast有什么区别?

什么是implicit_cast?何时应该优先使用implicit_cast而不是static_cast?

15得票6回答
当你使用多重继承时,什么情况下使用static_cast是安全的?

我发现自己遇到了这样一种情况:我知道某个类型的类型属于三个(或更多)继承级别之一。我调用一个工厂,它返回 B*,但是如果我的代码已经知道 T 的类型,则 T 可能是类型的最高级别(或第二级别)。 总之,在模板中我使用了 static_cast,这是错误的做法。我的问题是什么时候可以安全地进行...

15得票1回答
static_cast被误用了吗?

我对static_cast有复杂的感觉,因为它是最安全的C++转换,但同时允许安全和不安全的转换,所以你必须知道上下文才能确定它是否实际上是安全的或可能导致UB(例如在向子类转换时)。 那么为什么没有更安全的显式转换?这里有一个例子,它可能会很有用。在COM中,他们必须将接口指针作为void...

15得票2回答
静态转换的调用存在歧义

我有一些像这样的代码struct B { B() {} B(int v) {} }; struct A { operator int() const { return 1; } operator B() const { return B(); } }; in...

15得票1回答
为什么std::forward返回static_cast<T&&>而不是static_cast<T>?

让我们设计一个名为Y的函数,它可以进行重载操作。 void Y(int&amp; lvalue) { cout &lt;&lt; "lvalue!" &lt;&lt; endl; } void Y(int&amp;&amp; rvalue) { cout &lt;&lt; "rvalue!...

15得票2回答
静态转换到相同类型是否会引入运行时开销?

我有一个结构模板,它需要两种类型(T 和 S),并且在某个时刻使用 static_cast 将一种类型转换为另一种类型。往往情况下 T 和 S 是相同的类型。 以下是一个简化的示例设置: template &lt;typename T, typename S = T&gt; struct ...

15得票4回答
C++中的static_cast和引用

struct A{}; struct B : A{}; int main() { A a; A&amp; a_ref = a; static_cast&lt;B&gt;(a); // *1 static_cast&lt;B&amp;&gt;(a_ref); ...

15得票1回答
如何在C++17中将抛出异常的函数指针转换为noexcept?

C++17将noexcept作为函数类型的一部分。它还允许将noexcept函数指针隐式转换为可能引发异常的函数指针。 void (*ptr_to_noexcept)() noexcept = nullptr; void (*ptr_to_throwing)() = ptr_to_noexc...

14得票1回答
静态转换(static_cast)在多个参数时有什么问题?

除了将happyNumber设置为1337之外,这个转换还有什么效果(如果有的话),如果没有其他效果,那我怎么能编写像这样的代码?这是编译器bug还是C++的“隐藏特性”?int happyNumber = static_cast&lt;int&gt;(123.456, TRUE, "WTF"...