C++标准:C++不允许修改任何基本型别(包括指针)的暂时值
生活随笔
收集整理的這篇文章主要介紹了
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++不允许修改任何基本型别(包括指针)的暂时值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第七章——DMVs和DMFs(1)
- 下一篇: iOS web与JS交互