【问题标题】:Implementation of static_cast operator and it's limitsstatic_cast 运算符的实现及其限制
【发布时间】:2015-03-01 12:55:26
【问题描述】:

请说明为什么编译器不允许这种类型转换...错误编译器显示为“ Invalid static_cast from float * to int *”

#include<iostream>
using namespace std;
int main()
{
   float f=45.678;
   float *a;
   a=&f;
   int *d;
   cout<<static_cast<int *>(a);
}

【问题讨论】:

  • 为什么应该允许演员表?
  • 因为强制转换旨在允许不同数据类型之间的转换...@christian hackl
  • 可能需要更简单和更深入的解释@scis
  • @virusai:C++ 风格的转换明确设计为只允许 某些 类型的转换。这是他们的一大优点。与 C 风格的强制转换不同,它们可以防止意外强制转换和无声错误。 Scis 链接的答案有什么问题?

标签: c++ static-cast


【解决方案1】:

static_cast 是一个转换,它会在编译时检查转换是否合法。

考虑以下关于何时强制转换合法的示例:

  • 将较小尺寸的有符号/无符号整数类型转换为较大尺寸的有符号/无符号整数类型
  • 将派生类的指针向上转换为基类的指针。
  • 等等。

从编译器的角度来看,将 float* 转换为 int* 没有意义。如果你想进行这样的转换,你应该使用reinterpret_cast

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2011-09-05
    • 2014-07-29
    相关资源
    最近更新 更多