假设我有这段代码(不要介意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));
}
这是内联的有效用法吗?是否有意义?这是好习惯吗?毕竟,如果我没记错的话,内联意味着函数调用将被函数体替换,因此
return MinutesToDays(SecondsToMinutes(seconds))
应该等于
return seconds / 60.0 / 60.0 / 24.0
对?
还是只为此使用宏更好?
#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)))
哪个是更好的做法?还是都不是?我想要其他美分。
最佳答案
是的,但是没有。
此时,它没有任何伤害,但是也没有按照您认为的那样做。
在excellent post about inline
deft_code中正确地说:
因此,这样做不会对任何人造成伤害,但是编译器收听提示的机会实际上为0。如果认为适合内联代码,则它本身也会这样做。
如今,inline
主要用于链接器,因为它允许在多个编译单元中进行多个定义。
如果要确保您的代码尽可能快并且可以访问C++ 11,则应使用constexpr
:
constexpr float SecondsToMinutes(float seconds)
{
return seconds / 60.0;
}
//etc..
关于c++ - 这是内联函数的有效用法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40280087/