国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化

這篇具有很好參考價(jià)值的文章主要介紹了【C++11】:統(tǒng)一的列表初始化|聲明|STL變化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???慕斯主頁(yè)修仙—?jiǎng)e有洞天

?? ????????????????????????????????????????? ???今日夜電波:マイノリティ脈絡(luò)—ずっと真夜中でいいのに。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0:24━━━━━━???──────── 4:02
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????? ? ?? ? ? ? ?? ? ????

????????????????????????????????????????關(guān)注??點(diǎn)贊??收藏您的每一次鼓勵(lì)都是對(duì)我莫大的支持??


目錄

統(tǒng)一的列表初始化

使用初始化列表時(shí),可添加等號(hào)(=),也可不添加

創(chuàng)建對(duì)象時(shí)也可以使用列表初始化方式調(diào)用構(gòu)造函數(shù)初始化

std::initializer_list

基本概念

使用場(chǎng)景

底層原理

注意事項(xiàng)

聲明

auto

decltype

nullptr

STL中的變化

array

1. 包含頭文件

2. 定義array

3. 初始化array

4. 訪問(wèn)array元素

5. array成員函數(shù)

6. array與內(nèi)置數(shù)組的區(qū)別

forward_list

1. 包含頭文件

2. 定義和初始化 forward_list

3. 訪問(wèn) forward_list

4. 插入和刪除元素

5. 其他操作

注意事項(xiàng)


統(tǒng)一的列表初始化

????????在C++98中,標(biāo)準(zhǔn)允許使用花括號(hào){}對(duì)數(shù)組或者結(jié)構(gòu)體元素進(jìn)行統(tǒng)一的列表初始值設(shè)定,而C++11擴(kuò)大了用大括號(hào)括起的列表(初始化列表)的使用范圍,使其可用于所有的內(nèi)置類型和用戶自定義的類型,使用初始化列表時(shí),可添加等號(hào)(=),也可不添加。

使用初始化列表時(shí),可添加等號(hào)(=),也可不添加

  struct test
  {
  	int _x;
  	char _str;
  };
  
  int array1[] = { 1, 2, 3, 4, 5 };
	int array2[5] = { 0 };
	test aa = { 2,'r' };
	int x1 = 1;
  
	//C++11后以下也支持:
	int x2{ 2 };
	int array3[]{ 1, 2, 3, 4, 5 };
	int array4[5]{ 0 };
	test bb{ 2,'s' };

創(chuàng)建對(duì)象時(shí)也可以使用列表初始化方式調(diào)用構(gòu)造函數(shù)初始化

class Date
{
public:
	Date(int year, int month, int day)
		:_year(year)
		, _month(month)
		, _day(day)
	{
		cout << "Date(int year, int month, int day)" << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1(2022, 1, 1); // old style
  
	// C++11后支持的列表初始化,這里會(huì)調(diào)用構(gòu)造函數(shù)初始化
	Date d2{ 2022, 1, 2 };
	Date d3 = { 2022, 1, 3 };
	return 0;

  const Date& d4 = { 2023, 11, 25 };
  
  Date* p1 = new Date[3]{ d1, d2, d3 };
 	Date* p2 = new Date[3]{ {2022, 11, 25}, {2022, 11, 26}, {2022, 11, 27} };
}

????????需要注意的是:上述使用列表初始化方式Date d3 = { 2022, 1, 3 }的本質(zhì)也是類型轉(zhuǎn)換 構(gòu)造+拷貝構(gòu)造-》優(yōu)化直接構(gòu)造

std::initializer_list

????std::initializer_list 是C++11標(biāo)準(zhǔn)引入的一個(gè)模板類,用于表示對(duì)象的初始化列表。它提供了一種方便的方式來(lái)初始化對(duì)象,尤其是在構(gòu)造函數(shù)和函數(shù)中處理可變數(shù)量的參數(shù)時(shí)。下面是對(duì) std::initializer_list 的詳細(xì)解釋:

基本概念

? ? std::initializer_list 是一個(gè)輕量級(jí)的只讀容器,它內(nèi)部維護(hù)了一個(gè)指向堆上的數(shù)組以及該數(shù)組的長(zhǎng)度。它不支持添加、刪除元素等操作,但可以使用迭代器訪問(wèn)元素,以及使用 size() 函數(shù)獲得容器長(zhǎng)度。

????????當(dāng)使用花括號(hào) {} 進(jìn)行列表初始化時(shí),編譯器會(huì)嘗試構(gòu)造一個(gè) std::initializer_list 對(duì)象。例如:

std::initializer_list<int> ilist = {1, 2, 3, 4, 5};

????????在這個(gè)例子中,ilist 是一個(gè) std::initializer_list<int> 類型的對(duì)象,它包含5個(gè)整數(shù)。

?

使用場(chǎng)景

????????構(gòu)造函數(shù)和賦值運(yùn)算符:如果類的構(gòu)造函數(shù)或賦值運(yùn)算符接受一個(gè) std::initializer_list 參數(shù),那么可以使用花括號(hào)初始化列表來(lái)初始化或賦值對(duì)象。

class MyClass {
public:
    MyClass(std::initializer_list<int> list) {
        // 處理 list 中的元素
    }
};

MyClass obj({1, 2, 3}); // 使用 std::initializer_list 構(gòu)造函數(shù)

?????????函數(shù)參數(shù):函數(shù)也可以接受 std::initializer_list 參數(shù),從而能夠接收任意數(shù)量的元素。

void printNumbers(std::initializer_list<int> numbers) {
    for (int num : numbers) {
        std::cout << num << ' ';
    }
    std::cout << std::endl;
}

printNumbers({1, 2, 3, 4, 5}); // 輸出: 1 2 3 4 5

????????范圍循環(huán)std::initializer_list 可以與范圍循環(huán)(range-based for loop)一起使用,以迭代其元素。?

std::initializer_list<int> ilist = {1, 2, 3, 4, 5};
for (int i : ilist) {
    std::cout << i << ' '; // 輸出: 1 2 3 4 5
}

????????使用{ }初始化容器?

????????可以發(fā)現(xiàn)C++11后所有的容器都適配了std::initializer_list(這里只舉幾個(gè)例子)。這也使得所有的容器都可使用花括號(hào)進(jìn)行初始化:【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器?

????????我們像如下對(duì)容器使用{ }:

vector<int> v = { 1,2,3,4 };
list<int> lt = { 1,2 };
// 這里{"sort", "排序"}會(huì)先初始化構(gòu)造一個(gè)pair對(duì)象
map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} };
// 使用大括號(hào)對(duì)容器賦值
v = {10, 20, 30};

?

底層原理

????????從編譯器底層中使用std::initializer_list用{ }來(lái)初始化的話,他會(huì)找一個(gè)常量區(qū)將{ }內(nèi)的數(shù)組內(nèi)的內(nèi)容儲(chǔ)存起來(lái),然后在std::initializer_list這個(gè)類下會(huì)有兩個(gè)指針?lè)謩e指向這段空間的開始和結(jié)束的下一個(gè)位置,他支持迭代器,而這個(gè)迭代器是原生指針。因此我們可以利用該特性合理的使用std::initializer_list,讓我們的類也支持用{ }來(lái)初始化。如下例子讓模擬實(shí)現(xiàn)的vector也支持{}初始化和賦值

template<class T>
class vector {
public:
	typedef T* iterator;
	vector(initializer_list<T> l)
	{
		_start = new T[l.size()];
		_finish = _start + l.size();
		_endofstorage = _start + l.size();
		iterator vit = _start;
		typename initializer_list<T>::iterator lit = l.begin();
		while (lit != l.end())
		{
			*vit++ = *lit++;
		}
		//for (auto e : l)
		// *vit++ = e;
	}
	vector<T>& operator=(initializer_list<T> l) {
		vector<T> tmp(l);
		std::swap(_start, tmp._start);
		std::swap(_finish, tmp._finish);
		std::swap(_endofstorage, tmp._endofstorage);
		return *this;
	}
private:
	iterator _start;
	iterator _finish;
	iterator _endofstorage;
};

?

注意事項(xiàng)
  • std::initializer_list 中的元素是常量,不能修改。
  • 不要將 std::initializer_list 用于期望長(zhǎng)期存儲(chǔ)值的場(chǎng)景,因?yàn)樗ǔV话瑢?duì)臨時(shí)數(shù)組的引用。
  • 在類的構(gòu)造函數(shù)中,如果參數(shù)為 std::initializer_list 類型,則需要在參數(shù)類型前加上花括號(hào) {}。

聲明

auto

????????在C++98中auto是一個(gè)存儲(chǔ)類型的說(shuō)明符,表明變量是局部自動(dòng)存儲(chǔ)類型,但是局部域中定義局部的變量默認(rèn)就是自動(dòng)存儲(chǔ)類型,所以auto就沒(méi)什么價(jià)值了。C++11中廢棄auto原來(lái)的用法,將其用于實(shí)現(xiàn)自動(dòng)類型腿斷。這樣要求必須進(jìn)行顯示初始化,讓編譯器將定義對(duì)象的類型設(shè)置為初始化值的類型。

?

decltype

????????關(guān)鍵字decltype將變量的類型聲明為表達(dá)式指定的類型。 decltype可以推導(dǎo)對(duì)象的類型。這個(gè)類型是可以用的,他可以用來(lái)作為模板實(shí)參,或者再定義對(duì)象如下:

	int i = 1;
	double d = 2.2;
	auto j = i;

	auto ret = i * d;
	decltype(ret) x;

	vector<decltype(ret)> v;
	v.push_back(1);
	v.push_back(1.1);
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
nullptr

????????由于C++中NULL被定義成字面量0,這樣就可能回帶來(lái)一些問(wèn)題,因?yàn)?既能指針常量,又能表示整形常量。所以出于清晰和安全的角度考慮,C++11中新增了nullptr,用于表示空指針。

?

STL中的變化

????????對(duì)于之前的容器做出了新增cbegin()、cend()、帶initializer_list的構(gòu)造賦值等等較為輕微的變化 ,較為大的變化為如下為新增的容器:

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器?

????????對(duì)于unordered_map和unordered_set我們還是比較熟悉的了,相比map和set而言:

  • map 和 set 是基于紅黑樹實(shí)現(xiàn)的,這意味著它們的元素在內(nèi)部是有序的。
  • unordered_map 和 unordered_set 是基于哈希表實(shí)現(xiàn)的,因此它們的元素在內(nèi)部是無(wú)序的。

????????對(duì)此不多敘述。下面詳細(xì)介紹一下array和forward_list這兩個(gè)容器:

array

????????在C++中,array是一個(gè)固定大小的序列容器,它包含相同類型的元素,并且其大小在編譯時(shí)確定。array是C++標(biāo)準(zhǔn)庫(kù)<array>頭文件中的一個(gè)模板類,它提供了對(duì)數(shù)組元素的隨機(jī)訪問(wèn)迭代器,并支持一系列成員函數(shù)來(lái)操作這些元素。

?

1. 包含頭文件

????????使用array之前,你需要包含<array>頭文件:

#include <array>
2. 定義array

????????你可以使用以下語(yǔ)法定義一個(gè)array

std::array<類型, 大小> 變量名;

????????其中,類型array中元素的類型,大小array中元素的數(shù)量,它是一個(gè)常量表達(dá)式,必須在編譯時(shí)確定。

????????例如,定義一個(gè)包含5個(gè)整數(shù)的array

std::array<int, 5> myArray;
3. 初始化array

????????可以使用列表初始化來(lái)初始化array

std::array<int, 5> myArray = {1, 2, 3, 4, 5};

????????也可以使用fill構(gòu)造函數(shù)來(lái)初始化所有元素為同一值:

std::array<int, 5> myArray(10); // 所有元素初始化為10
4. 訪問(wèn)array元素

????????你可以使用下標(biāo)操作符[]來(lái)訪問(wèn)array中的元素:

int firstElement = myArray[0]; // 訪問(wèn)第一個(gè)元素  
myArray[2] = 15; // 修改第三個(gè)元素
5. array成員函數(shù)

????????如下可見(jiàn)分別為,是否常量正向,是否常量反向使用的迭代器:? ??

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器?

????????如下為返回大小、最大的大小、判空、使用[]、at來(lái)修改數(shù)組內(nèi)的值、返回最前面的值和最后面的值。我們可能沒(méi)見(jiàn)過(guò)data這個(gè)函數(shù),這里的作用為:返回指向數(shù)組對(duì)象中第一個(gè)元素的指針。下面fill則是的將 val 設(shè)置為數(shù)組對(duì)象中所有元素的值。swap用的較多,即為交換兩個(gè)數(shù)組。

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器?

? ? array提供了許多有用的成員函數(shù),例如size()來(lái)獲取數(shù)組大小,begin()end()來(lái)獲取指向數(shù)組第一個(gè)和最后一個(gè)元素的迭代器,以及at()來(lái)訪問(wèn)元素(如果索引越界,會(huì)拋出std::out_of_range異常)。

	std::array<int, 6> myarray;
	std::array<int, 6> myarray2 = { 0 };//myarray2{};全部初始化為0  myarray2{1,2,3};部分初始化,其他為0
	myarray.fill(5);
	myarray.swap(myarray2);
	cout << myarray[2] << endl;
	myarray.at(2) = 3;
	cout << myarray.size() << endl;
	cout << myarray.max_size() << endl;
	cout << myarray.empty()<< endl;
	cout << myarray2.front() << endl;
	cout << myarray2.back() << endl;
	cout << myarray2.data() << endl;

【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器?

6. array與內(nèi)置數(shù)組的區(qū)別

????????與內(nèi)置數(shù)組相比,std::array有以下優(yōu)點(diǎn):

  • 固定大小std::array的大小在編譯時(shí)確定,這有助于捕獲潛在的錯(cuò)誤,并可能優(yōu)化性能。
  • 支持STL算法std::array可以與STL算法無(wú)縫集成,而內(nèi)置數(shù)組則不可以。
  • 安全性std::arrayat()成員函數(shù)在索引越界時(shí)會(huì)拋出異常,而內(nèi)置數(shù)組則可能導(dǎo)致未定義行為。
  • 更好的接口std::array提供了更豐富的接口和成員函數(shù),使得操作更加便捷。

forward_list

? ? forward_list 是 C++ 標(biāo)準(zhǔn)庫(kù)中的一個(gè)容器,它表示一個(gè)單向鏈表。與 list 容器不同,forward_list 只允許從前往后遍歷元素,不支持從后往前遍歷。因此,forward_list 通常比 list 更節(jié)省空間,但在某些操作上可能稍慢一些。

????????以下是 forward_list 的一些基本特性和用法:

1. 包含頭文件

????????使用 forward_list 需要包含 <forward_list> 頭文件:

#include <forward_list>
2. 定義和初始化 forward_list

????????你可以使用花括號(hào)初始化列表或 insert、emplace 等成員函數(shù)來(lái)創(chuàng)建和填充 forward_list。

	std::forward_list<int> myList = { 1, 2, 3, 4, 5 };
	std::forward_list<int> mylist2;
	std::forward_list<int> mylist3(10);//創(chuàng)建包涵10個(gè)元素的容器
	std::forward_list<int> mylist4(10,5);//創(chuàng)建包涵10個(gè)元素的容器并且全初始化為5
	std::array<int, 6> myarray2 = { 1,2,3,4,5 };
	std::forward_list<int> mylist5(myarray2.begin(), myarray2.end());//使用其他容器的迭代器初始化
3. 訪問(wèn) forward_list

????????由于 forward_list 是單向的,你只能使用迭代器從前往后遍歷它。

for (auto it = myList.begin(); it != myList.end(); ++it) {
    std::cout << *it << " ";
}

????????或者,使用基于范圍的 for循環(huán):

for (const auto& elem : myList) {
    std::cout << elem << " ";
}
4. 插入和刪除元素

????????使用assign()用新元素替換容器中原有內(nèi)容。emplace_front()和push_front()在容器頭部插入一個(gè)元素。但emplace_front()效率更高。insert_after()和emplace_after(),在指定位置之后插入一個(gè)新元素,并返回一個(gè)指向新元素的迭代器。但emplace_after()效率更高。pop_front(),刪除容器頭部的一個(gè)元素。erase_after(),刪除容器中某個(gè)指定位置之后或區(qū)域內(nèi)的所有元素。

  std::forward_list<int> first;
  std::forward_list<int> second;

  first.assign (4,15);                           // 15 15 15 15

  second.assign (first.begin(),first.end());     // 15 15 15 15

  first.assign ( {77, 2, 16} );                  // 77 2 16
///
  std::forward_list< std::pair<int,char> > mylist;

  mylist.emplace_front(10,'a');//push_front()
  mylist.emplace_front(20,'b');
  mylist.emplace_front(30,'c');

///
  std::forward_list< std::pair<int,char> > mylist;
  auto it = mylist.before_begin();

  it = mylist.emplace_after ( it, 100, 'x' );
  it = mylist.emplace_after ( it, 200, 'y' );
  it = mylist.emplace_after ( it, 300, 'z' );

///
  std::forward_list<int> mylist = {10, 20, 30, 40, 50};
                                            // 10 20 30 40 50
  auto it = mylist.begin();                 // ^

  it = mylist.erase_after(it);              // 10 30 40 50
                                            //    ^
  it = mylist.erase_after(it,mylist.end()); // 10 30

????????下面主要介紹其中比較特殊的兩個(gè)迭代器before_begin和cbefore_begin。這兩個(gè)迭代器指向容器中第一個(gè)元素之前的位置。只是后面的是常量迭代器而已

  std::forward_list<int> mylist = {20, 30, 40, 50};

  mylist.insert_after ( mylist.before_begin(), 11 );//11 20 30 40 50
  mylist.insert_after ( mylist.cbefore_begin(), 19 ); //19 11 20 30 40 50
5. 其他操作

? ? forward_list 還提供了許多其他成員函數(shù),empty(檢查列表是否為空)、size(返回列表中元素的數(shù)量)、swap()(交換兩個(gè)容器中的元素)、resize()(調(diào)整容器的大?。?、clear()(刪除容器存儲(chǔ)的所有元素),sort()(排序)。reverse()(翻轉(zhuǎn)順序)。主要介紹如下:splice_after(),將某個(gè) forward_list 容器中指定位置或區(qū)域內(nèi)的元素插入到另一個(gè)容器的指定位置之后。remove(val),刪除容器中所有等于 val 的元素。remove_if(),刪除容器中滿足條件的元素。unique(),刪除容器中相鄰的重復(fù)元素,只保留一個(gè)。merge(),合并兩個(gè)事先已排好序的 forward_list 容器,并且合并之后的 forward_list 容器依然是有序的。

  std::forward_list<int> first = { 1, 2, 3 };
  std::forward_list<int> second = { 10, 20, 30 };

  auto it = first.begin();  // points to the 1

  first.splice_after ( first.before_begin(), second );
                          // first: 10 20 30 1 2 3
                          // second: (empty)
                          // "it" still points to the 1 (now first's 4th element)
  second.splice_after ( second.before_begin(), first, first.begin(), it);
                          // first: 10 1 2 3
                          // second: 20 30

  first.splice_after ( first.before_begin(), second, second.begin() );
                          // first: 30 10 1 2 3
                          // second: 20
                          // * notice that what is moved is AFTER the iterator

///
bool single_digit (const int& value) { return (value<10); }

// a predicate implemented as a class:
class is_odd_class
{
public:
  bool operator() (const int& value) {return (value%2)==1; }
} is_odd_object;

  std::forward_list<int> mylist = {7, 80, 7, 15, 85, 52, 6};

  mylist.remove_if (single_digit);      // 80 15 85 52

  mylist.remove_if (is_odd_object);     // 80 52

///
  std::forward_list<double> first = {4.2, 2.9, 3.1};
  std::forward_list<double> second = {1.4, 7.7, 3.1};
  first.sort();
  second.sort();
  first.merge(second); //first: 1.4 2.9 3.1 3.1 4.2 7.7

注意事項(xiàng)
  • 由于 forward_list 是單向的,它不支持 reverse_iterator,因此不能使用 rbegin()rend() 函數(shù)。
  • 在某些情況下,forward_list 可能比 listvector 等其他容器更適合,特別是在你需要一個(gè)簡(jiǎn)單的單向鏈表并且空間效率很重要的時(shí)候。但是,由于它只支持單向遍歷,因此在某些算法上可能不如雙向鏈表或數(shù)組高效。

?


????????????????????? ? ?感謝你耐心的看到這里?( ′???` )比心,如有哪里有錯(cuò)誤請(qǐng)?zhí)咭荒_作者o(╥﹏╥)o!?

????????????????????????????????? ? ? ?【C++11】:統(tǒng)一的列表初始化|聲明|STL變化,C++修仙 筑基中,c++,后端,開發(fā)語(yǔ)言,容器

????????????????????????????????????????????????????????????????????????給個(gè)三連再走嘛~??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-843563.html

到了這里,關(guān)于【C++11】:統(tǒng)一的列表初始化|聲明|STL變化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • c# 初始化列表,并給列表里面所有的元素進(jìn)行初始化

    Enumerable.Repeat 方法是用于生成一個(gè)包含指定元素重復(fù)若干次的序列。它接受兩個(gè)參數(shù),第一個(gè)參數(shù)是要重復(fù)的元素,第二個(gè)參數(shù)是重復(fù)次數(shù)。 下面是 Enumerable.Repeat 方法的用法和示例:

    2024年02月13日
    瀏覽(25)
  • 結(jié)構(gòu)體聲明、定義和初始化的幾種方式

    五種結(jié)構(gòu)體聲明方式: 直接聲明結(jié)構(gòu)體類型 聲明結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量 不指定結(jié)構(gòu)體名而直接定義結(jié)構(gòu)體變量 使用結(jié)構(gòu)體標(biāo)記和類型別名 直接聲明結(jié)構(gòu)體別名 在C語(yǔ)言中,標(biāo)記(tag)是在定義struct, union或enum之后使用的標(biāo)識(shí)符。 之所以稱其為結(jié)構(gòu)體的“

    2023年04月11日
    瀏覽(23)
  • Java創(chuàng)建數(shù)組、賦值的四種方式,聲明+創(chuàng)建+初始化 詳解

    以int數(shù)據(jù)類型為例 注意: new 數(shù)據(jù)類型[]{},其中花括號(hào)可以省去,但要在[ ]中填寫數(shù)組的個(gè)數(shù); 創(chuàng)建多維數(shù)組時(shí) new后面第一個(gè)方括號(hào)中的元素?cái)?shù)量不能省略 1、一維數(shù)組的聲明方式: type[] arrayName; 或 type arrayName[]; 推薦使用第一種格式,因?yàn)榈谝环N格式具有更好的可讀性,表

    2024年04月11日
    瀏覽(24)
  • 初始化列表

    初始化列表

    ?在創(chuàng)建對(duì)象時(shí),編譯器通過(guò)調(diào)用構(gòu)造函數(shù),給對(duì)象中各個(gè)成員變量一個(gè)合適的初始值。 雖然上述構(gòu)造函數(shù)調(diào)用之后,對(duì)象中已經(jīng)有了一個(gè)初始值,但是不能將其稱為對(duì)對(duì)象成員變量的初始化,構(gòu)造函數(shù)體中的語(yǔ)句只能將其稱為賦初值,而不能成作初始化。因?yàn)?初始化只能進(jìn)

    2024年02月04日
    瀏覽(20)
  • 初始化列表的使用

    初始化列表的使用

    問(wèn)題 類中是否可以定義 const 成員? 可以的 下面的類定義是否合法? 如果合法,ci 的值是什么,存儲(chǔ)在哪里? 上面的 Test 類定義是合法的,但是要定義 Test 類對(duì)象的時(shí)候,編譯器會(huì)報(bào)錯(cuò),提示 const 成員變量 ci 沒(méi)初始化 類中的 const 成員 我們對(duì)上面的代碼進(jìn)行編譯,編譯直

    2024年02月09日
    瀏覽(19)
  • 掌握 C# 變量:在代碼中聲明、初始化和使用不同類型的綜合指南

    變量是用于存儲(chǔ)數(shù)據(jù)值的容器。 在 C# 中,有不同類型的變量(用不同的定義),例如: int - 存儲(chǔ)整數(shù)(沒(méi)有小數(shù)點(diǎn)的整數(shù)),如 123 或 -123 double - 存儲(chǔ)浮點(diǎn)數(shù),有小數(shù)點(diǎn),如 19.99 或 -19.99 char - 存儲(chǔ)單個(gè)字符,如 \\\'a\\\' 或 \\\'B\\\'。 Char 值用單引號(hào)括起來(lái) string - 存儲(chǔ)文本,如

    2024年01月17日
    瀏覽(25)
  • 【已解決】錯(cuò)誤:只允許在 C99 模式下使用‘for’循環(huán)初始化聲明

    【已解決】錯(cuò)誤:只允許在 C99 模式下使用‘for’循環(huán)初始化聲明

    運(yùn)行3DFFA_v2_master項(xiàng)目 運(yùn)行sh build.sh腳本文件 環(huán)境:centos python3.7 render.c: 在函數(shù)‘_render’中: render.c:43:5: 錯(cuò)誤:只允許在 C99 模式下使用‘for’循環(huán)初始化聲明 for (int i = 0; i ntri; i++) render.c:43:5: 附注:使用 -std=c99 或 -std=gnu99 來(lái)編譯您的代碼 render.c:75:14: 錯(cuò)誤:‘i’重定義 for

    2024年02月08日
    瀏覽(25)
  • C++之初始化列表詳細(xì)剖析

    C++之初始化列表詳細(xì)剖析

    初始化列表:以一個(gè) 冒號(hào)開始 ,接著是一個(gè)以 逗號(hào)分隔的數(shù)據(jù)成員列表 ,每個(gè) \\\"成員變量\\\" 后面跟一個(gè) 放在括號(hào)中的初始值或表達(dá)式。 不知道大家有沒(méi)有想過(guò)這樣一個(gè)問(wèn)題,成員函數(shù)明明可以在函數(shù)內(nèi)部對(duì)成員變量進(jìn)行賦值,那為什么還要搞出初始化列表這個(gè)東西呢?這個(gè)

    2024年02月06日
    瀏覽(28)
  • 17. C++ static、const 和 static const 類型成員變量聲明以及初始化

    1. C++ static、const 和 static const 類型成員變量聲明以及初始化 const 定義的常量在超出其作用域之后其空間會(huì)被釋放; static 定義的靜態(tài)常量在函數(shù)執(zhí)行后不會(huì)釋放其存儲(chǔ)空間; 1.2 static static 表示的是靜態(tài)的 類的靜態(tài)成員函數(shù)、靜態(tài)成員變量是和類相關(guān)的,而不是和類的具體對(duì)

    2024年01月18日
    瀏覽(53)
  • C++ | 談?wù)剺?gòu)造函數(shù)的初始化列表

    C++ | 談?wù)剺?gòu)造函數(shù)的初始化列表

    我們知道,對(duì)于下面這個(gè)類A的成員變量 _a1 和 _a2 屬于【聲明】,還沒(méi)有在內(nèi)存中為其開辟出一塊空間以供存放,真正開出空間則是在【定義】的時(shí)候,那何時(shí)定義呢?也就是使用這個(gè)類A去實(shí)例化出對(duì)象的時(shí)候 這個(gè)對(duì)象的空間被開出來(lái)了,難道里面的成員變量就一定開出空間

    2023年04月11日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包