C++ short类型的初值怎么给 C++ short变量初始化【入门】

5次阅读

short变量初值必须在-32768~32767内,常用初始化方式有:short a = 123;、short b{456};(推荐,范围检查严格)、short c(789);,不可用浮点字面量直接初始化。

C++ short类型的初值怎么给 C++ short变量初始化【入门】

直接给short赋初值的写法有哪些

声明short变量时,初值必须是能被short表示的整数(通常是 -32768 到 32767),超出范围编译器可能报错或静默截断。
最常用的是三种初始化方式:
short a = 123;(拷贝初始化)
short b{456};(列表初始化,推荐,会检查范围)
short c(789);(直接初始化)
{}最安全:比如short x{-32769};会触发编译错误,而= -32769;可能只发警告甚至不报——取决于编译器和警告级别。

为什么short不能用浮点数字面量初始化

short整型,不能隐式转换浮点字面量。写short s = 3.14;会编译失败,错误信息类似:Error: cannot convert 'double' to 'short'
常见误操作:
• 把计算结果(如int/Float混合运算)直接赋给short
• 从std::cin读入后没检查范围就存进short
正确做法:先转成整数再显式强制转换,且确保值在范围内:
short s = static_cast<short>(round(3.14));</short>
• 更稳妥的是先存进int,判断后再转:int tmp = 32768; if (tmp >= -32768 && tmp (tmp);

全局/静态short变量的默认初值是什么

全局或static作用域的short变量,若未显式初始化,会被自动初始化为0(零初始化)。
但局部(栈上)的short变量不会——它的值是未定义的,可能为任意垃圾值。
容易踩的坑:
• 忘记初始化局部short就直接参与计算,导致行为不可预测
• 在循环中重复使用未初始化的short变量,每次结果都可能不同
建议统一用{}初始化:例如short count{};,既明确又安全,还能避免忘记初始化。

short做容器元素或函数参数时要注意什么

std::vector<short></short>没问题,但注意:
• 迭代器解引用得到的是short&,不是int;别想当然当成更大类型用
• 函数传参时,void f(short x)接收int会隐式截断,比如f(100000)实际传进去的是100000 % 65536(有符号情况更复杂)
性能方面:short在多数现代CPU上并不比int快,寄存器宽度通常是32或64位,存short反而可能引入额外的截断或符号扩展指令。
所以除非明确需要节省内存(比如百万级数组),否则没必要刻意用short——尤其别为了“看着省”把循环变量、临时计数器全换成short

立即学习C++免费学习笔记(深入)”;

text=ZqhQzanResources