1. 程式人生 > 實用技巧 >c++11中的move是否會改變物件的地址

c++11中的move是否會改變物件的地址

C++11中引入的移動語義,這個move操作是否會改變物件的地址,測試程式如下:

 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 
 5 using namespace std;
 6 
 7 string func(int n)
 8 {
 9     string s = "";
10     for(int i = 0; i < n; i++)
11         s += ('A' + i);
12     cout << "in func , s : 
" << s << std::endl; 13 printf("in func , s arrd : %lu\n", (long unsigned int)&s); 14 printf("in func , s data addr : %lu\n", (long unsigned int)s.data()); 15 16 return std::move(s); 17 } 18 19 20 int main() 21 { 22 string ret = func(30); 23 24 std::cout << "
ret : " << ret << std::endl; 25 printf("in main , ret addr : %lu\n", (long unsigned int)&ret); 26 printf("in main , ret data addr : %lu\n", (long unsigned int)ret.data()); 27 28 return 0; 29 }

執行結果:

可以看到,s的地址和ret的地址是不一樣的,而它們底層引用的資料的地址是一樣的。

也就是說元資料的地址會改變,但是底層的真正儲存資料的地址不變,這也是move的作用,減少底層的資料的拷貝。