Ste*_*ond 6 c++ macros inline function
假设我有这个代码(不要介意SecondsToMinutes和MinutesToHours是彼此的副本)
inline float SecondsToMinutes(float seconds)
{
return seconds / 60.0;
}
inline float MinutesToHours(float minutes)
{
return minutes / 60.0;
}
inline float HoursToDays(float minutes)
{
return minutes / 24.0;
}
inline float SeconndsToHours(float seconds)
{
return MinutesToHours(SecondsToMinutes(seconds));
}
inline float MinutesToDays(float minutes)
{
return HoursToDays(MinutesToHours(minutes));
}
inline float SeconndsDays(float seconds)
{
return MinutesToDays(SecondsToMinutes(seconds));
}
Run Code Online (Sandbox Code Playgroud)
这是内联的有效用法吗?是否有意义?这是好习惯吗?毕竟,如果我没记错的话,内联意味着函数调用被函数体替换,所以
return MinutesToDays(SecondsToMinutes(seconds))
Run Code Online (Sandbox Code Playgroud)
应该相当于
return seconds / 60.0 / 60.0 / 24.0
Run Code Online (Sandbox Code Playgroud)
对?
或者为此使用宏更好吗?
#define EXCHANGE_SEC_MIN(x) (x / 60.0)
#define EXCHANGE_MIN_H(x) (x / 60.0)
#define EXCHANGE_H_D(x) (x / 24.0)
#define EXCHANGE_SEC_H(x) (EXCHANGE_MIN_H(EXCHANGE_SEC_MIN(x)))
#define EXCHANGE_MIN_D(x) (EXCHANGE_H_D(EXCHANGE_MIN_H(x)))
#define EXCHANGE_SEC_D(x) (EXCHANGE_MIN_D(EXCHANGE_SEC_MIN(x)))
Run Code Online (Sandbox Code Playgroud)
哪一个更好的做法?或者两者都不是?我希望其他人能分一杯羹.
这是内联的有效用法吗?是否有意义?这是好习惯吗?毕竟,如果我没记错的话,内联意味着函数调用被函数体替换,所以
当然是啦.你让它更清晰,总是好的.
return seconds / 60.0 / 60.0 / 24.0
Run Code Online (Sandbox Code Playgroud)
是的,结果如何.或者应该.inline只是一个提示,编译可能会另有决定.但对于这样的一个班轮,编译器会内联它.
宏?为什么?如果可以用函数完成,为什么要使用宏?
这是内联的有效用法吗?是否有意义?
嗯,是的但没有.
在这一点上它并没有伤害任何东西,但也没有做你认为它做的事情.
在关于inline deft_code 的优秀帖子中正确地说:
据说,
inline您认为函数应该内联到编译器的提示.这可能是在1998年,但十年后编译器不需要这样的提示.更不用说人类在优化代码时通常是错误的,因此大多数编译器都会忽略"提示".
因此,如果你这样做,它不会伤害任何人,但你的编译器听取你的提示的几率几乎为0.如果它认为适合内联代码,它本身就会这样做.
inline 现在主要用于链接器,因为它允许多个编译单元中的多个定义.
如果您想确保您的代码尽可能快,并且您可以访问C++ 11,那么您应该使用constexpr:
constexpr float SecondsToMinutes(float seconds)
{
return seconds / 60.0;
}
//etc..
Run Code Online (Sandbox Code Playgroud)