日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++标准:C++不允许修改任何基本型别(包括指针)的暂时值

發布時間:2025/4/9 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++标准:C++不允许修改任何基本型别(包括指针)的暂时值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從《C++標準庫》一書中看到這樣一句話:C++不允許修改任何基本型別(包括指針)的暫時值,想了半天,實在不理解。基本類型char,int,float等等還有暫時值?例如int a=2,那么這個a的暫時值是哪個呢?我能不能把2理解為a的暫時值?如果2為暫時值,顯然不行,因為你根本無法修改2,那么那句話就毫無意義了。暫時值先不管了,不知道怎么找,搜了很多,明白一個大概意思,先看幾個從網上找到的例子:

#include<iostream> using namespace std; void main() {int a = 4;a++ = 5;int *b;*b = 4;*b++ = 5; }

a++;
后綴++ 返回的是一個(臨時的)右值,其值是a的原值, 不能被賦值。(注意,這里說的是右值)
*b++ = 5;
該表達式是 *(b++) = 5;
也就是先對指針加1, 再解引用。
b++ 同a++一樣, 是一個臨時的右值,(其值是b的原值), 不能被賦值, 比如下面的代碼不合法:
b++ = ptr;
b++表達式產生的是一個臨時的指針值, 對指針解引用(當然,該值必須指向合法位置)之后, 就是一個左值了,所以:
*b++ = 5; 就是合法的。

再看一個例子;

#include <iostream> using namespace std; class my {public:my(int j=0):i(j){}int i;void operator=(my&out)//這里重定義一個賦值操作符=,為下面的賦值做準備。 {i=out.i;} }; my fun() {my temp(1);return temp;//這里返回一個類的臨時變量 } int fun2() {int a;return a;//這里返回一個普通int臨時變量 } int main() { my out(2);fun()=out; //這里可以對類的臨時變量賦值fun2()=3; //但是這里對普通int類型的變量就會出錯 }

fun2()返回的是一個右值,不能賦值,只能這么解釋了。

再看《C++標準庫》提到的問題:

vector<int> coll; ..... sort(++coll.begin(),coll.end());

書上說會編譯失敗。我在VS2012下面編譯卻沒有問題。

記住一點:右值不能被修改。

轉載于:https://www.cnblogs.com/VIPler/p/4319103.html

總結

以上是生活随笔為你收集整理的C++标准:C++不允许修改任何基本型别(包括指针)的暂时值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。