C++ 从 int 到 long 的转换是一种提升吗?
C++ Is conversion from int to long a promotion?
在网上查了很多资料后,我无法弄清楚从 int 到 long 的转换是否被认为是一种提升。
如果在微软网站上找到如下代码here :
long long_num1, long_num2;
int int_num;
// int_num promoted to type long prior to assignment.
long_num1 = int_num;
但是 cppreference website 上没有显示。
我理解促销是一种保持价值的转化(转化时不会改变价值)。
谁能帮我解决这个问题?
提前致谢
据我所知,没有数据丢失,因为 int
和 long
都具有相同的 4 字节大小。您可以通过运行以下代码检查您的编译器是否同意这一点:
std::cout << sizeof(int) << ' ' << sizeof(long);
输出应该是“4 4”。那将意味着它们是相同的。
编辑:抱歉;谢谢你纠正我。大小可能会有所不同,请在引用它们时使用 sizeof
。
long long_num1, long_num2;
int int_num;
// int_num promoted to type long prior to assignment.
long_num1 = int_num;
文本不正确。 int_num
没有 提升,因为它已经是 int
,所以这里没有意义。
在 assignment, a implicit conversion 发生 - 从源类型到目标类型。因为 long
可以表示 int
的所有值,所以不会更改值,并且 int_num
值将转换为具有相同值的 long
。
在网上查了很多资料后,我无法弄清楚从 int 到 long 的转换是否被认为是一种提升。
如果在微软网站上找到如下代码here :
long long_num1, long_num2;
int int_num;
// int_num promoted to type long prior to assignment.
long_num1 = int_num;
但是 cppreference website 上没有显示。
我理解促销是一种保持价值的转化(转化时不会改变价值)。
谁能帮我解决这个问题?
提前致谢
据我所知,没有数据丢失,因为 int
和 long
都具有相同的 4 字节大小。您可以通过运行以下代码检查您的编译器是否同意这一点:
std::cout << sizeof(int) << ' ' << sizeof(long);
输出应该是“4 4”。那将意味着它们是相同的。
编辑:抱歉;谢谢你纠正我。大小可能会有所不同,请在引用它们时使用 sizeof
。
long long_num1, long_num2; int int_num; // int_num promoted to type long prior to assignment. long_num1 = int_num;
文本不正确。 int_num
没有 提升,因为它已经是 int
,所以这里没有意义。
在 assignment, a implicit conversion 发生 - 从源类型到目标类型。因为 long
可以表示 int
的所有值,所以不会更改值,并且 int_num
值将转换为具有相同值的 long
。