为什么相同的类型不同

Why same types are different?

本文关键字:类型 为什么      更新时间:2023-10-16

为什么这个(char在我的实现上签名):

cout << std::is_same< char,signed char>::value;

输出假吗?

这三种类型是在不同时期引入的。

来自C99 Rational:

指定三种类型的char:
signed, plain, unsigned。普通的char可以表示为有符号的或无符号的取决于实现,如在先前的实践中。类型signed char为在C89中引入,以便在以下系统上提供一字节的有符号整数类型实现普通char作为unsigned char .

它们必须在c++中保持不同的类型,以允许char的重载是可移植的。

如果您正在使用Visual Studio,请参阅这里:http://msdn.microsoft.com/en-us/library/cc953fe1.aspx

c++编译器将变量处理为类型char, signed char和unsigned字符有不同的类型。char类型的变量被提升为就好像它们是带符号的char by类型默认,除非/J编译选项。在这种情况下,它们是被视为unsigned char类型和晋升为int无符号扩展。

[Edit]直接来自ISO c++ 0x标准,第3.9.1段(第71页,http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf):

字符可以显式声明未签名的或签名的。普通字符,带符号Char和unsigned Char共有三种不同的类型。

char, signed charunsigned char是三种不同的类型,即使char的解释方式与编译器解释signed char的方式相同。

§3.9.1/1从c++标准中说

Plain char、signed char和unsigned char是三种不同的类型。

换句话说,不要认为charsigned char的缩写形式,因为它不是。

只是为了强调类型如何可以不同,尽管它们的位解释相同,考虑以下两个结构体:

struct A
{
   int i;
};
struct B
{
   int i;
};

它们是一样的吗?当然不是。同样,charsigned char是不同的类型。

试试这个:

 cout << std::is_same<A,B>::value;

c++标准(引用工作草案№3225,2010-11-27)

3.9.1基本类型

普通字符、有符号字符和无符号字符Char是三种不同的类型。

这取决于实现,但如果我没记错的话,我在某处读到这两个应该是不同的,以便区分c类型字符串和8位有符号数

相关文章: