7得票3回答
重载函数调用不明确

我有两个函数: void DoSomething( const tchar* apsValue ) void DoSomething( size_t aiValue ) 现在我想将'0'作为size_t类型传递: DoSomething(0); 编译器报错:“重载函数调用模糊”。为...

7得票1回答
reinterpret_cast / static_cast 和未定义行为

在我正在开发的变体类中,原始存储是一个char数组: alignas(/* the strictest alignment of all types of the variant */) char storage[/* ... */]; 赋值运算符类似于: template<cl...

7得票2回答
为什么对表达式使用static_cast会产生分配作用?

我需要将两个无符号8位值相减,然后将此值加入到一个32位累加器中。8位减法可能会出现下溢,但这是可以接受的(无符号整型下溢是定义良好的行为,因此不会有问题)。 我期望 static_cast<uint32_t>(foo - bar) 可以完成我的需求(其中foo和bar都是uin...

7得票2回答
C ++中旧式简单强制转换的优先级

我在一些C++代码中使用了旧式的强制转换,现在希望将其转换为新式的。我查看了运算符优先级和结合性文档,但未能理解其含义。 ( double ) myValueA() / myValueB() 等同于 static_cast<double>( myValueA() ) / m...

7得票2回答
为什么 std::optional 的强制类型转换操作符被忽略了?

这段代码 #include <iostream> #include <optional> struct foo { explicit operator std::optional<int>() { return std::opti...

7得票2回答
static_cast<T>对T&做什么?

我曾经提出这个问题,并试图通过使用static_cast来解决它。(顺便说一句,这确实解决了问题,只是我不确定我理解为什么这样做。) 在代码中: vector&lt;int&gt; foo = {0, 42, 0, 42, 0, 42}; replace(begin(foo), end(f...

7得票2回答
使用static_cast处理包含混合(基类和派生类)对象的向量是否存在性能风险?(也就是说,“这是个愚蠢的想法吗?”)

给定一个基类gameObject和一个派生类animatedGameObject,我认为将它们的所有实例存储在一个std::vector中可能是个好主意。如果向量GameObjects被声明为gameObject*的基本类型,则需要进行转换才能使用派生对象实例。 例如: vector&lt...

7得票9回答
我的避免使用 dynamic_cast<> 的方法比 dynamic_cast<> 本身更快吗?

我刚刚回答了一个问题(链接),这让我想到了另外一个问题: 在我的一个项目中,我进行一些网络消息解析。这些消息的格式如下: [1 byte message type][2 bytes payload length][x bytes payload] 负载的格式和内容由消息类型确定。我有一...

7得票4回答
静态转换能将非空指针转换成空指针吗?

我需要编写一个回调函数的代码(它将从ATL中调用,但这并不是很重要): HRESULT callback( void* myObjectVoid ) { if( myObjectVoid == 0 ) { return E_POINTER; } CMyC...

7得票2回答
static_cast void* char*与static_cast void** char**的区别

如果我按照以下步骤操作,一切都正常: char* cp = "abc"; void* vp = NULL; vp = static_cast&lt;void*&gt;(cp);//ok cp = static_cast&lt;char*&gt;(vp);//ok 但以下内容不属于此类: ...