您好,登錄后才能下訂單哦!
本篇內容介紹了“Go語言中const常量的用法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、Go語言中const常量
Go語言的常量關鍵字是const,用于存儲不會改變的數值,定義的格式為:
const valueName type = value或者const valueName = value
const a = "abc" const b string = "Hello"
Go里面常量,具有常量的基本特質,不能修改。原因是:常量的數值在編譯階段就已經確定了,運行時不能夠修改。例子如下:
package main
import (
"fmt"
)
func main() {
const a = "abc"
const b string = "Hello"
a = "Word"
fmt.Println("Hello, playground:",a,b)
}
output:./prog.go:10:4: cannot assign to a
另外,Go語言的常量在試圖打印地址的時候,也會編譯出錯,原因是Go語言中并沒有*const這種數據類型。
package main
import (
"fmt"
)
func main() {
const a = "abc"
const b string = "Hello"
fmt.Println("Hello, playground:",&a,b)
}
output:./prog.go:11:35: cannot take the address of a
Go 語言中的常量定義會有一些默認的規則,主要有:
1.定義常量時必須有值。
2.常量組中如果不對常量賦值的話,常量的值與上面一個是一致的。
3.常量與iota混用的話,iota會從0開始計數,多一個常量就會增加1。
例子如下:
package main
import (
"fmt"
)
func main() {
const (
a = 2
b // b=2
c = 5
d // d=5
e // e=5
)
fmt.Println("Hello, playground:", a, b, c, d, e)
const (
f = 1
g = 1
h = iota // 前面有2個常量所以這里h =2
i // i 在h之后,也會自動+1
j // 同理與j,自動+1
k = 10
l = iota // iota 并不會因為上面的k值變化,而變化依然是6
)
fmt.Println("Hello, playground:", f, g, h, i ,j, k, l)
}
output:
Hello, playground: 2 2 5 5 5
Hello, playground: 1 1 2 3 4 10 6
二、C++中const常量
C++中的const常量,表示的是不可以更改數據的值。具有下面幾個特點:
1.具體實現方式是,在編譯階段,編譯器就把const修飾的常量放入符號表中,在運行階段使用該常量的時候,直接從符號表中取出該值即可。
2.const修飾的常量,還是有地址的,并且該地址里面的數值也是可以更改的(備注:這里指的是局部變量里面的const常量)。
3.const修飾的全局變量和static變量存儲在全局的只讀空間中,這時候的地址,在運行階段不可以更改,因為只讀內存被修改的話,會直接crash。
例子如下:
#include <iostream>
using namespace std;
int main()
{
const int a = 10;
int* p = (int*)(&a);
*p = 20;
cout<<"&a:"<<&a<<" a:"<<a<<endl; // a的值是從符號表里面直接讀出來的,所以還是10。
cout<<" p:"<<p<<"*p:"<<*p<<endl; // *p的值,是修改內存之后的值,源于內存,所以是20。
return 0;
}
output:
&a:0xffcc93d4 a:10
p:0xffcc93d4*p:20
“Go語言中const常量的用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。