【发布时间】:2016-12-23 16:12:15
【问题描述】:
如果我跑:
#include <type_traits>
#include <iostream>
int main()
{
std::cout << "sizeof(long) = " << sizeof(long) << "\n";
std::cout << "sizeof(long long) = " << sizeof(long long) << "\n";
std::cout << "std::is_same<long, long long>::value = "
<< std::boolalpha << std::is_same<long, long long>::value
<< "\n";
return 0;
}
在我的机器(和 Coliru)上,我get:
sizeof(long) = 8
sizeof(long long) = 8
std::is_same<long, long long>::value = false
不仅仅是std::is_same<>;期望 int64_t 实例化的翻译单元失败,因为我只在另一个翻译单元中为 int 和 long long int 编译,尽管这一切都发生在同一台机器上。
为什么这些类型不一样?我的意思是,表现出与 typedef 相同类型的行为一样?
【问题讨论】:
-
我认为这个问题没有任何问题。它包含一个可编译的示例,以及预期和记录的输出。为什么它被否决了?
-
恕我直言,显而易见的程度不应成为否决的因素。广义相对论的问题对我的老教授来说是显而易见的。
-
char是有符号或无符号的,但char既不是signed char也不是unsigned char。wchar_t必须是一个独特的类型,而不是另一个整数类型 -
@einpoklum 正如 Bathsheba 所说,这是一个语言规则,所以你遵循它很简单。你处理谷物而不是反对它。
-
@einpoklum 因为它们是内置类型。没有内置类型是另一种类型的别名。实现可能使用相同的东西,但就代码而言,它们是不同的。该标准在如何实际实现内置类型方面提供了很大的余地。
标签: c++ types 64-bit int64 long-long