gpt4 book ai didi

c++ - C类类型转换和功能类型转换有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 23:00:31 34 4
gpt4 key购买 nike

考虑:

b = (int) a;    // C-like cast notation
b = int (a); // Functional notation

最佳答案

显然,我最初的回答是错误的。它们大致相等。而像 long long 这样的复合类型名称或 void *不能直接使用函数式语法(即 long long(val) 不起作用),使用 typedef可以解决这个问题。

这两种转换符号都非常糟糕,应该避免。例如:

const char c = 'a';
void *fred = (void *)(&c);

有效,但不应该。

两种 C 风格的强制转换符号有时都会表现得像 static_cast , 有时像 const_cast , 有时像 reinterpret_cast ,甚至两者的组合,具体取决于使用它的确切情况。这些语义相当复杂,而且在任何给定情况下都很难准确判断发生了什么。

我主要使用 C++ static_cast<type>(val)风格转换,并且从不使用 C 风格转换。根据我对这个问题的研究,我也将停止对任何东西使用函数式强制转换。问题“C++ cast syntax styles”有一个很好的答案(已被接受),详细说明了原因。

关于c++ - C类类型转换和功能类型转换有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775781/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com