Windows VC++编译器允许一种奇怪的c样式转换方式(或者它可能不是转换??)
Windows VC++ compiler allows an odd way of c style casting (or it may not be casting??)
我知道最好避免C++程序中的c样式转换。
下面是一个非常简单的代码,它在 WindowsVC++ compiler
上编译得很好(也成功运行。打印了数字)。但无法在C++ - GCC
和C++ - Clang
上编译。
char c = 'A';
int num = unsigned char(c);
是的,它不是标准的转换方式,因此在GCC
或Clang
中编译时失败没有错误。
但是为什么VC++ (Microsoft Visual Studio)
能够成功编译和执行呢?
它真的是一个铸造概念还是其他一些编程概念允许它在VC++
中工作?
由于它在VC++
中工作,因此在Windows 端的粗略实现是什么,以使上述代码段正常工作?(粗略猜测也很好。只是为了了解他们(Microsoft窗口)如何处理它。
注意:VC compiler
(c编译器)无法编译上述代码。有趣的是VC++ compiler
,在编译和运行方面都做得很好。
这不是 c 样式的强制转换表达式,它是特定于 c++ 的,尽管不是很常用。它被称为功能风格铸造。
查看:显式类型转换(数字 2)
相关文章:
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 二进制 '==':未找到采用 'Enemy' 类型左侧操作数的运算符(或者没有可接受的转换)
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:C2679 二进制"==":未找到采用类型 'const std::string' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误 C2678:二进制"+":未找到采用类型 'volatile A' 的左侧操作数的运算符(或者没有可接受的转换)
- 错误 C2679:二进制"<<":未找到采用类型 'mystring' 的右侧操作数的运算符(或者没有可接受的转换)
- Windows VC++编译器允许一种奇怪的c样式转换方式(或者它可能不是转换??)
- 错误 C2679:二进制'>':找不到采用类型 'int' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误 C2679 二进制"=":未找到采用类型 'int' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误 C2679 二进制"=":未找到采用类型 'int' 的右侧操作数的运算符(或者没有可接受的转换)
- 运算符重载:简单添加...错误 C2677:二进制"+":未找到采用类型 ___ 的全局运算符(或者不存在可接受的转换)
- 错误 C2677:二进制'+=':找不到采用类型 'Movie' 的全局运算符(或者没有可接受的转换)
- Qt:将QPixmap保存到std::vector<无符号字符>-或者将QByteArray转换为std::
- 错误 C2678:'=='二进制:未找到采用类型 'CSchemaString' 的左操作数的运算符(或者没有可接受的转换)
- 在c++中强制转换change变量,或者只告诉编译器它可以
- 错误 C2679:二进制"[":未找到采用类型为"const VerseKey"的右操作数的运算符(或者没有可接受的转换)
- ToCString 的标头在哪里,或者如何将参数转换为 cstring?
- 我的字节数组到十六进制字符串转换器有什么问题,或者为什么它在写入文件时会在某个位置后剪切符号?
- 我可以将 std::数组转换为切片吗?或者我还能用什么