对于此代码:
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
我希望这些结果适用于a
,c
和d
,但我对b
感到困惑。
64显然适合8位unsigned char
。有人可以解释一下吗?
答案 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)
);
。