【问题标题】:(C++) What are the Differences between these 3 type conversion methods? [duplicate](C++) 这3种类型转换方法有什么区别? [复制]
【发布时间】:2020-10-06 11:32:37
【问题描述】:

当我在 char 类型变量上使用它时,以下任一方法都会给我相同的值。那么它们之间有什么区别呢?

  • (int)c
  • int{c}
  • static_cast<int>(c)

【问题讨论】:

  • 你读过好的C++ programming book吗?你读过 C++11 标准草案n3337吗?您是否阅读过您的 C++ 编译器的文档,可能是 GCC ?你看过C++ reference website吗?
  • 在实践中,在大多数情况下(至少使用GCC),生成的机器代码将完全相同相同。尝试使用g++ -fverbose-asm -O -S 然后查看生成的汇编代码
  • 一定是骗子,例如C++ cast syntax styles

标签: c++ casting type-conversion


【解决方案1】:

对于使用 eth 函数式转换符号的初学者,需要简单的类型说明符。

也就是说你可能不会写

unsigned int( c )

强制转换的功能符号创建一个临时对象。

在使用显式类型转换时,您可以创建例如左值引用。

这是一个演示程序。

#include <iostream>

int main()
{
    char c = 'A';

    ++( char &)c;

    std::cout << "c = " << c << '\n';
}

来自 C++ 标准(5.2.3 显式类型转换(函数式表示法)

3 类似地,一个简单类型说明符或类型名称说明符后跟 一个花括号初始化列表创建一个指定类型的临时对象 使用指定的花括号初始化列表进行直接列表初始化(8.5.4), 它的值是作为prvalue的临时对象。

至于static_cast 则符合 C++ 标准(5.2.9 静态转换)

1 表达式 static_cast(v) 的结果是 将表达式 v 转换为类型 T。如果 T 是左值引用 类型或对函数类型的右值引用,结果是左值; 如果 T 是对对象类型的右值引用,则结果是 xvalue; 否则,结果为纯右值。 static_cast 运算符不得 抛弃一成不变

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多