为什么在 C 中使用 floor() 时类型定义了两次?
Why is the type defined twice when using floor() in C?
我正在尝试学习 C/Objective-C。在这本书中,我将阅读 (Objective-C 编程:大书呆子牧场指南) 他们在此变量上设置了两次类型。为什么?当我删除运算符右侧的 (unsigned int)
时,它仍然可以正常工作。
unsigned int feet = (unsigned int)floor(rawFeet);
说类型被定义了两次是不正确的。定义类型意味着创建新类型。这里提到了两次类型。在左侧,它用于定义类型为 unsigned int
的名为 feet
的变量。在右侧,它用于将 floor
的 return 值转换为 unsigned int
,其中 return 是 double
- 用于分配给变量.
附带说明:如果您知道 rawFeet 是正的,我会通过使用 unsigned 来假设,那么调用 floor 是完全没有必要的。相反,您可以将 rawFeet 转换为 unsigned int。
例如
double rawFeet = 24.6;
unsigned int feet = (unsigned int)rawFeet;
// feet now equals 24
此外,评论中提到不需要强制转换。这可能是正确的,但很多编译器会正确地警告您这样做。例如在 Visual C++ 中:
unsigned int feet = floor(rawFeet);
// warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
我正在尝试学习 C/Objective-C。在这本书中,我将阅读 (Objective-C 编程:大书呆子牧场指南) 他们在此变量上设置了两次类型。为什么?当我删除运算符右侧的 (unsigned int)
时,它仍然可以正常工作。
unsigned int feet = (unsigned int)floor(rawFeet);
说类型被定义了两次是不正确的。定义类型意味着创建新类型。这里提到了两次类型。在左侧,它用于定义类型为 unsigned int
的名为 feet
的变量。在右侧,它用于将 floor
的 return 值转换为 unsigned int
,其中 return 是 double
- 用于分配给变量.
附带说明:如果您知道 rawFeet 是正的,我会通过使用 unsigned 来假设,那么调用 floor 是完全没有必要的。相反,您可以将 rawFeet 转换为 unsigned int。
例如
double rawFeet = 24.6;
unsigned int feet = (unsigned int)rawFeet;
// feet now equals 24
此外,评论中提到不需要强制转换。这可能是正确的,但很多编译器会正确地警告您这样做。例如在 Visual C++ 中:
unsigned int feet = floor(rawFeet);
// warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data