亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2255 | 回復(fù): 8
打印 上一主題 下一主題

[C++] 編譯器自動生成的move ctor的行為是? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-04-17 15:45 |只看該作者 |倒序瀏覽
本帖最后由 Frahm 于 2013-04-17 15:46 編輯

我很疑惑,std::is_move_constructible<T>::value的值總是true,比如我聲明一個空類,它也是true, 所以我就認為編譯器自動生成了對應(yīng)的move ctor,然而經(jīng)過測試,我發(fā)現(xiàn)不然。

  1. struct foo {
  2.         int* ptr;
  3. };

  4. int main() {
  5.         {               
  6.                 std::cout << std::is_move_constructible<foo>::value << '\n';
  7.                 foo f;
  8.                 f.ptr = (int*)12;
  9.                 foo f2(std::move(f));
  10.                 std::cout << f.ptr << ' ' << f2.ptr << '\n';
  11.         }
  12.         return 0;
  13. }
復(fù)制代碼
輸出的f.ptr和f2.ptr是一樣的,我以為默認的行為會把f.ptr賦值為nullptr, 不然的話不是很危險嗎。。。
我感覺編譯器根本就沒有自動生成move ctor。
也就是說std::is_move_constructible這個trait 沒有用?
有沒有能確切表示可以被move 構(gòu)造的trait呢?

論壇徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46處女座
日期:2013-10-24 14:25:01酉雞
日期:2014-04-07 11:54:15
2 [報告]
發(fā)表于 2013-04-17 15:51 |只看該作者
復(fù)雜度好高,是編程還是被程序扁。。

論壇徽章:
0
3 [報告]
發(fā)表于 2013-04-17 15:55 |只看該作者
回復(fù) 2# linux_c_py_php


    。繌(fù)雜度是指?

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
4 [報告]
發(fā)表于 2013-04-17 20:54 |只看該作者
回復(fù) 1# Frahm


    你顯式聲明下就是了,如果不放心的話:

  1. struct foo
  2. {

  3.     foo( foo&& ) = default;

  4.     foo& operator = ( foo&& ) = default;

  5. };
復(fù)制代碼

論壇徽章:
0
5 [報告]
發(fā)表于 2013-04-17 20:58 |只看該作者
本帖最后由 Frahm 于 2013-04-17 20:59 編輯

回復(fù) 4# lost_templar


    額,vs11不支持這樣用default,和delete。
另外我不是想為個別類寫函數(shù),而是想寫模版類,特化處理不同情況

論壇徽章:
0
6 [報告]
發(fā)表于 2013-04-17 21:03 |只看該作者
本帖最后由 Frahm 于 2013-04-17 21:04 編輯

結(jié)論是
std::is_move_constructible, 這個trait基本沒用, 因它不能判斷一個類是否有move ctor, 它只能用來判斷類T是否接受rvalue作為構(gòu)造參數(shù),而copy ctor在參數(shù)聲明為const的時候也可以接收。
所以它不能判斷一個類是否聲明了T::T(T&&), 而是判斷對于一個類T能否這么寫 T t(T());
也有可能調(diào)用了T::T(const T&)

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
7 [報告]
發(fā)表于 2013-04-17 21:06 |只看該作者
回復(fù) 5# Frahm

你換編譯器試試吧


   

論壇徽章:
1
午馬
日期:2013-08-23 23:39:47
8 [報告]
發(fā)表于 2013-04-17 23:57 |只看該作者
http://www.cplusplus.com/referen ... move_constructible/


輸出的f.ptr和f2.ptr是一樣的,我以為默認的行為會把f.ptr賦值為nullptr, 不然的話不是很危險嗎。。。
應(yīng)該是這個f move之后內(nèi)容應(yīng)該就是不確定的了,類有效但不可用。

move構(gòu)造 這里看上去很像傳遞的意思。

我也沒怎么看過新c++.


論壇徽章:
0
9 [報告]
發(fā)表于 2013-04-18 06:27 |只看該作者
會有trivial defaulted move ctor。
默認就是copy,不管清除狀態(tài)。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP