简单问题:将一个整数,比如100,转换为双精度浮点数时,会“向上”或“向下”舍入到下一个双精度浮点数,还是总是舍入到最近的一个(最小增量)? 例如,对于static_cast<double>(100): 如果d2 < d1,它会向哪个方向转换? 奖励问题:我是否可以...
什么是implicit_cast?何时应该优先使用implicit_cast而不是static_cast?
我发现自己遇到了这样一种情况:我知道某个类型的类型属于三个(或更多)继承级别之一。我调用一个工厂,它返回 B*,但是如果我的代码已经知道 T 的类型,则 T 可能是类型的最高级别(或第二级别)。 总之,在模板中我使用了 static_cast,这是错误的做法。我的问题是什么时候可以安全地进行...
我对static_cast有复杂的感觉,因为它是最安全的C++转换,但同时允许安全和不安全的转换,所以你必须知道上下文才能确定它是否实际上是安全的或可能导致UB(例如在向子类转换时)。 那么为什么没有更安全的显式转换?这里有一个例子,它可能会很有用。在COM中,他们必须将接口指针作为void...
我有一些像这样的代码struct B { B() {} B(int v) {} }; struct A { operator int() const { return 1; } operator B() const { return B(); } }; in...
让我们设计一个名为Y的函数,它可以进行重载操作。 void Y(int& lvalue) { cout << "lvalue!" << endl; } void Y(int&& rvalue) { cout << "rvalue!...
我有一个结构模板,它需要两种类型(T 和 S),并且在某个时刻使用 static_cast 将一种类型转换为另一种类型。往往情况下 T 和 S 是相同的类型。 以下是一个简化的示例设置: template <typename T, typename S = T> struct ...
struct A{}; struct B : A{}; int main() { A a; A& a_ref = a; static_cast<B>(a); // *1 static_cast<B&>(a_ref); ...
C++17将noexcept作为函数类型的一部分。它还允许将noexcept函数指针隐式转换为可能引发异常的函数指针。 void (*ptr_to_noexcept)() noexcept = nullptr; void (*ptr_to_throwing)() = ptr_to_noexc...
除了将happyNumber设置为1337之外,这个转换还有什么效果(如果有的话),如果没有其他效果,那我怎么能编写像这样的代码?这是编译器bug还是C++的“隐藏特性”?int happyNumber = static_cast<int>(123.456, TRUE, "WTF"...