static-cast相关内容

为什么我不能在 char * 和 unsigned char * 之间进行静态转换?

显然编译器认为它们是不相关的类型,因此需要 reinterpret_cast.为什么会有这样的规定? 解决方案 它们是完全不同的类型,见标准: 3.9.1 基本类型 [basic.fundamental] 1 声明为字符 char) 的对象应足够大存储实现的基本字符集的任何成员.如果一个该集合中的字符存储在字符对象中,积分该字符对象的值等于单个的值该字符的字符文字形式.它是实现 ..
发布时间:2022-01-12 20:16:50 C/C++开发

static_cast 是什么?对 T& 做些什么?

所以我问了这个问题,我想通过static_cast解决它.(顺便说一句,它确实解决了问题,我只是不确定我是否理解原因.) 在代码中: vectorfoo = {0, 42, 0, 42, 0, 42};replace(begin(foo), end(foo), static_cast(foo.front()), 13); static_cast 是否只是构造了一个 R 值 int?那和只 ..
发布时间:2021-12-31 22:09:20 C/C++开发

C++ 不能通过虚基 A 从基 A 转换为派生类型 B

我有三个班级: class A {};B 类:虚拟公共 A {};C 类:虚拟公共 A {};D类:公共B,公共C{}; 尝试从 A* 静态转换到 B* 我收到以下错误: 不能通过虚基A从基A转换为派生类型B 解决方案 为了理解强制转换系统,您需要深入研究对象模型. 简单层次模型的经典表示是包含:如果 B 派生自 A 那么 B 对象实际上将包含一个 A 子对象以及它自己的属性. ..
发布时间:2021-12-31 21:53:49 C/C++开发

C++ 什么时候我们应该更喜欢使用两个链接的 static_cast 而不是 reinterpret_cast

首先,这不是 为什么我们要在 C++ 中使用 reinterpret_cast,而两个链接的 static_cast 可以完成它的工作?. 我知道我们甚至不能使用两个链接的 static_cast 来实现这一点的情况,reinterpret_cast 可以做什么.但是在任何情况下,我应该更喜欢两个链接的 static_cast 而不是简单且更具可读性的 reinterpret_cast? ..
发布时间:2021-12-31 21:52:31 C/C++开发

当两个链接的 static_cast 可以完成它的工作时,为什么我们在 C++ 中有 reinterpret_cast ?

假设我想将 A* 转换为 char* 反之亦然,我们有两个选择(我的意思是,我们中的许多人认为我们有两个选择,因为两者似乎都有效!因此混乱!): 结构体A{年龄;字符名称[128];};一个;char *buffer = static_cast(static_cast(&a));//选择1char *buffer = reinterpret_cast(&a);//选择2 两者都工作正常. / ..
发布时间:2021-12-31 21:45:10 C/C++开发

static_cast<> 和 static_cast<> 和有什么区别?和 C 风格的铸造?

是否有任何理由更喜欢 static_cast 而不是 C 风格的转换?它们是等价的吗?有什么速度差异吗? 解决方案 C++ 样式转换由编译器检查.C 样式转换不是,并且可能在运行时失败. 另外,c++ 风格的转换很容易搜索,而 c 风格的转换真的很难搜索. 另一个很大的好处是 4 种不同的 C++ 样式转换更清楚地表达了程序员的意图. 在编写 C++ 时,我几乎总是使 ..
发布时间:2021-12-31 21:27:48 C/C++开发

static_cast 和 Implicit_cast 有什么区别?

什么是implicit_cast?我什么时候应该更喜欢implicit_cast而不是static_cast? 解决方案 我正在复制我对 在另一个地方回答此评论. 您可以使用 static_cast 进行向下转换.implicit_cast 并非如此.static_cast 基本上允许您进行任何隐式转换,以及任何隐式转换的反向操作(达到某些限制.如果涉及虚拟基类,则不能向下转换).但 ..
发布时间:2021-12-24 15:20:55 C/C++开发

我应该在将 void* 转换为任何内容时使用 static_cast 还是 reinterpret_cast

static_cast 和 reinterpret_cast 似乎都可以很好地将 void* 转换为另一种指针类型.是否有充分的理由偏爱其中一个? 解决方案 使用 static_cast:它是最窄的强制转换,准确地描述了此处进行的转换.> 有一种误解,认为使用 reinterpret_cast 会更好,因为它意味着“完全忽略类型安全,只是从 A 转换到 B". 然而,这实际上并没有 ..
发布时间:2021-12-13 12:44:40 C/C++开发

为什么使用 static_cast(x) 而不是 (int)x?

我听说 static_cast 函数应该比 C 风格或简单函数风格的转换更受欢迎.这是真的?为什么? 解决方案 主要的原因是经典的 C 强制转换没有区分我们所说的 static_cast(), reinterpret_cast()、const_cast() 和 dynamic_cast().这四件事完全不同. static_cast() 通常是安全的.语言中有一个有效的转换, ..
发布时间:2021-12-01 15:19:01 C/C++开发

从编译器设置中关闭 RTTI 有什么好处?

由此(RTTI 有多贵?),似乎很明显动态转换是比静态类型比较昂贵得多,但我想知道在编译器选项(VS2010,/GR-)中关闭 RTTI 选项是否值得 我的代码中没有动态转换(我用静态转换替换了它们).但是 (/GR-) 选项在使用动态转换时除了发出错误之外还有其他作用吗?里面有没有内存或代码优化? 提前致谢. 解决方案 Straight 来自MSDN(强调我的): 当/ ..
发布时间:2021-09-18 19:12:46 C/C++开发

从基类指针 C++ 访问子类成员

我有一组自定义类 Student 对象.CourseStudent 和 ResearchStudent 都继承自 Student,Student 的所有实例都是其中之一. 我有一个函数来遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数. 问题是,因为这些函数没有重载,所以在Student中找不到,所以编译器大惊小怪. 如果我有一个指向 Student 的指针, ..

对重载函数的不明确调用

我有两个功能: void DoSomething( const tchar* apsValue )void DoSomething( size_t aiValue ) 现在我想将 '0' 作为 size_t 传递: DoSomething(0); 编译器抛出错误:“对重载函数的调用不明确" 为了解决这个问题,我可以使用 static_cast,例如: DoSomething(sta ..
发布时间:2021-06-13 19:38:12 C/C++开发

《跨界》尝试使用 static_cast 失败;为什么?

为什么“交叉投射"不起作用? 以下创建此对象继承模型: 食物/\芝士蛋糕 这里我尝试将 static_cast 指针从 cheese 指向 cake,制作一个芝士蛋糕 :D.我从 Apple Clang/LLVM 收到以下错误: 错误:不允许从 'Cheese *' 到 'Cake *' 的静态转换,这与继承无关 但他们是通过继承联系起来的:他们是兄弟姐妹. 为什么我不能将 ..
发布时间:2021-06-12 19:25:34 其他开发