将值乘以static_cast <uint8_t>时,如何确定自动类型

时间:2018-03-29 23:42:13

标签: c++

对于此代码:

int main(int argc, char **argv)
{
    auto a =     static_cast<uint8_t>(sizeof(uint64_t));
    auto b = 8 * static_cast<uint8_t>(sizeof(uint64_t));

    auto c =     static_cast<uint32_t>(sizeof(uint64_t));
    auto d = 8 * static_cast<uint32_t>(sizeof(uint64_t));

    return EXIT_SUCCESS;
}
  • a的类型解析为unsigned char
  • b的类型解析为int
  • c的类型解析为unsigned int
  • d的类型解析为unsigned int

我希望这些结果适用于acd,但我对b感到困惑。

64显然适合8位unsigned char。有人可以解释一下吗?

casting to auto

1 个答案:

答案 0 :(得分:5)

你没有&#34;转向自动&#34; (这将毫无意义/不可能); auto一如既往地触发编译器获​​取RHS上表达式的类型。该类型不受运行时值和有多少位的控制,而是由标准控制。标准的整数提升规则意味着乘法的结果是char类型,而不是int。但是,当表达式已经 d类型时,不需要整数提升,因此unsigned保留其右侧操作数的CREATE TABLE PROJECT( ProjectID int NOT NULL IDENTITY(1000, 100), ProjectName Text NOT NULL, Department Char(35) NOT NULL, MaxHours Numeric NOT NULL, StartDate Date NULL, EndDate Date NULL, CONSTRAINT PROJECT_PK PRIMARY KEY(ProjectID), CONSTRAINT PROJ_Depart_FK FOREIGN KEY(Department) REFERENCES DEPARTMENT(DepartmentName) );