标量数据类型
中文

标量数据类型

上一节重点讲的是“变量该怎样声明”。这一节把视线转向这些变量里面到底装着什么值。

对于刚开始写 scpp 程序的人来说,先掌握四种标量类型就已经够做很多事了:

和前一节一样,下面这些短小示例都可以保存成 concepts.scpp,然后这样构建并运行:

scpp concepts.scpp -o concepts
./concepts

整数与小数

int 通常是计数、下标以及其它整数计算的起点;而当分数 / 小数部分真的重要时, double 会是更常见的选择。

import std;

int main() {
    int left = 10 - 3;
    double price = 1.25 + 0.5;

    std::println("left = {}, price = {}", left, price);
    return 0;
}

输出:

left = 7, price = 1.75

注意这里的两个计算各自待在自己的类型里:int 表达式完全是整数运算,double 表达式完全是浮点运算。

如果以后你需要的不是 int / double 这种“顺手”的写法,而是精确位宽,那么 scpp 也提供了 int32_tuint64_tfloat64_t 之类的名字。

bool 应该来自真正的条件

在 scpp 里,条件本身就应该已经是 bool。比较表达式会直接给出这样的 bool 值。

import std;

int main() {
    int lives = 3;
    bool keep_playing = lives > 0;

    if (keep_playing) {
        std::println("keep playing");
        return 0;
    }

    std::println("game over");
    return 0;
}

输出:

keep playing

这和普通 C++ 有一个细小但很重要的区别:scpp 不会要求你把任意整数当成“truthy / falsey”来理解。你应该明确写出像 lives > 0 这样的比较,再把结果保存在 bool 里。

char 表示单个字符

当一个字节大小的单字符值就足够时,就用 char

import std;

int main() {
    char grade = 'A';

    std::println("grade = {}", grade);
    return 0;
}

输出:

grade = A

这里单引号很重要。'A' 是一个 char;而 "A" 表示的是文本,不是单个字符值。

再记住一条规则

scpp 会把这些标量类型明确地区分开来。boolcharintdouble 不会静默地 互相转换。所以前面的例子才会让每个表达式都保持在同一种标量类型里,并在需要 bool 时写出真正的比较。

一开始这会比普通 C++ 更严格一点,但它也让每次计算到底是什么类型,读起来更一目了 然。

下一节会继续沿着这些基础往前走,把计算和动作打包进具名函数里。


← 上一章:变量与显式初始化 · 目录 · 下一章:函数 →