C++为什么不可能将这两个操作合并为一行?

Sen*_*nel 1 c++ floor mod

鉴于:

double d;
int lsb;
Run Code Online (Sandbox Code Playgroud)

以下编译:

lsb = (floor(d));
lsb = lsb % 10;
Run Code Online (Sandbox Code Playgroud)

但是以下内容不是:

lsb = (floor(d)) % 10;
Run Code Online (Sandbox Code Playgroud)

IDE强调了开头floor并报告:

表达式必须具有整数或未整合的枚举类型.

YSC*_*YSC 11

你可以组合这两行,但这需要一个演员:

lsb = static_cast<int>(floor(d)) % 10;
Run Code Online (Sandbox Code Playgroud)

之所以存在多重载荷std::floor; 请注意以下事项:

double      floor( double arg );
Run Code Online (Sandbox Code Playgroud)

因此,floor(d)是一个double并且不能直接int使用模数运算符(没有强制转换).