Open nonocast opened 2 years ago
ANSI C 通过const声明常量,常量在第一次赋值后不能再次修改,可以理解为只读,readonly。Swift中通过let定义常量。
const int x = 5; x = 8; // error: cannot assign to variable 'x' with const-qualified type 'const int'
const int num 虽然编译可以通过,但是没有意义,随机值。
const int num
const int num; num = 1; // error
clang打开-Wall
const int num; // warning: variable 'x' is uninitialized when used here
Swift中就是通过let定义constant
let x = 5 x = 7 // error: Cannot assign to value 'x' is a 'let' constant
const int days[4] = {1, 2, 3, 4}; days[0] = 7; // error: cannot assign to variable 'days' with const-qualified type 'const int [4]'
const char name[] = "nonocast"; name[0] = 'a'; // error
char* name = "nonocast"时,编译器会将"nonocast"放在read-only的segment上,但还是建议加上const,如果不加在运行时修改会产生runtime fault error,加上const则会直接生成编译时错误。
char* name = "nonocast"
在函数中声明为const的形参在函数被调用时会得到实参的值。
void bar(const int n) { printf("n: %d\n", n); n = 1; // error: cannot assign to variable 'n' with const-qualified type 'const int' }
定义了一个指向const int的指针p,所以不能修改*p
const int *p = &x; *p = 7; // error: read-only variable is not assignable p = &y; // ok
定义一个只想int的常量指针p, *p可以被修改,但不能指向别人
int* const p = &x; *p = 7; // ok p = &y; // error: cannot assign to variable 'p' with const-qualified type 'int *const'
const 修饰变量
ANSI C 通过const声明常量,常量在第一次赋值后不能再次修改,可以理解为只读,readonly。Swift中通过let定义常量。
const int num
虽然编译可以通过,但是没有意义,随机值。clang打开-Wall
Swift中就是通过let定义constant
const 修饰数组
char* name = "nonocast"
时,编译器会将"nonocast"放在read-only的segment上,但还是建议加上const,如果不加在运行时修改会产生runtime fault error,加上const则会直接生成编译时错误。const 修饰函数参数
在函数中声明为const的形参在函数被调用时会得到实参的值。
const 修饰指针
定义了一个指向const int的指针p,所以不能修改*p
定义一个只想int的常量指针p, *p可以被修改,但不能指向别人
参考阅读