日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2025/4/9 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++不允许修改任何基本型别(包括指针)的暂时值的全部內容,希望文章能夠幫你解決所遇到的問題。

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