Comparison of Shell Script Execution Modes

方法概览

1
% echo "echo 'Hello Script'" > script.sh

方式1:直接运行可执行文件

1
2
3
% chmod +x script.sh
% ./script.sh
Hello Script

方式2:使用命令 sh 或 bash

1
2
3
4
5
% sh script.sh
Hello Script

% bash script.sh
Hello Script

方式3:使用命令 source 或 .

1
2
3
4
5
% source script.sh
Hello Script

% . ./script.sh
Hello Script

两种分类方法

是否需要执行权限

只有方式1需要执行权限。这是因为方式1把脚本作为可执行文件,自然需要执行权限,但方式2和方式3都是把脚本作为命令的参数,可以不具备执行权限

C++ Smart Pointer

原始指针

要想了解智能指针,就需要首先了解原始指针的痛点,原始指针有几点问题

Lvalues and Rvalues

说明: 本文探讨的是 C++11 以来的值类别

关于左值和右值,在不对其进行详细的划分时,简单的分类方法包括

  1. 左值持久,右值短暂
  2. 能取得地址得通常是左值,反之通常是右值(这一方法启示我们一个表达式的类型与其是左值还是右值无关,即相同类型的表达式既可以是左值也可以是右值)

右值引用是必须绑定到右值的引用,通过&&获取右值引用

C++ Type Conversion

普通类型

类类型

对于类类型,编译器只能自动执行一步隐式类型转换.例如从字符串字面值转换为string类型,但是无法继续将string隐式转换为其他类型

Comparison of C++ Object Initialization Method

在了解创建对象的方式之前,首先了解一下初始化赋值两个操作,

  1. 初始化是创建变量时赋予其一个初始值,即初始化之前并不存在变量
  2. 赋值是把对象的当前值擦除,用新值代替旧值,即赋值之前存在变量

让人困惑的是=既可以用于初始化,也可以用于赋值,不要认为初始化和赋值是相同的操作(对于内置类型看不出这一区别,但是对于类的对象而言,这涉及的就是 = 到底使用的是拷贝构造函数还是拷贝赋值运算符了)

0%