Re: [問題] G++ and VC++ Constructor 問題
: → ROGZ: 還有,VC是沒問題的, 是g++不行 06/01 22:55
沒仔細看原文 (趴
g++ 給的錯誤訊息是
error: conversion from 'const char*' to non-scalar type 'A' requested
這句話在這裡有點摸不著頭到底為什麼
不過拿一些相關的關鍵字下去 google 時卻讓我發現一件事:
A a = "123"; 這個語法其實是 Copy Initialization 而不是 Direct Initialization
A a("123"); 這個才是 Direct Initialization
兩者之間的差別在於, copy initialization 做的是複製
因此它會把 = 右邊的東西先轉成左邊型態之後呼叫 copy ctor 複製過去 (至少語意上)
發生錯誤的地方就是「轉」這個動作
一邊是個 const char * 另一邊是個物件
所以會去看物件方有沒有目標方定義的轉換, 也就是吃這種型態的 ctor
但 A 並沒有吃 const char * 的 ctor 所以轉不動出現錯誤
這一切在 Direct Initialization 都不會發生
因為那是直接抓 A 的 ctor 做 overload resolution 所以可以隱式轉
更多關於此兩者的差別可以看 GotW #36 http://www.gotw.ca/gotw/036.htm
VC++ 可以過的原因可能是它把這兩者混在一起了...
====
那所以如果 = 右邊的東西是個 string 就可以過了
因為這下右邊能夠「轉」成左邊所以什麼事都沒有
例如以下都是 OK 的:
A a2 = string("123");
A a3 = "123"s; // 這是 C++14 的標準 literal suffix
// 需要 using namespace std::literals;
// 且要對 g++ 下 --std=c++14
// 特點就是雖然寫 "" 但型態卻是 string 而非 const char *
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █▄▄▄▄▄
▍./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏ζ(▏●‵◥′●▊)Ψ ▏ █ ⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主義 █▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界を大いに盛り上げるための涼宮ハルヒの団
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.29.238
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1496330554.A.570.html
→
06/01 23:23, , 1F
06/01 23:23, 1F
→
06/01 23:24, , 2F
06/01 23:24, 2F
※ 編輯: LPH66 (180.177.29.238), 06/01/2017 23:24:57
→
06/01 23:25, , 3F
06/01 23:25, 3F
→
06/01 23:26, , 4F
06/01 23:26, 4F
推
06/01 23:50, , 5F
06/01 23:50, 5F
→
06/01 23:52, , 6F
06/01 23:52, 6F
→
06/01 23:54, , 7F
06/01 23:54, 7F
→
06/01 23:57, , 8F
06/01 23:57, 8F
→
06/01 23:58, , 9F
06/01 23:58, 9F
→
06/02 00:02, , 10F
06/02 00:02, 10F
→
06/02 00:02, , 11F
06/02 00:02, 11F
→
06/02 00:07, , 12F
06/02 00:07, 12F
→
06/02 00:20, , 13F
06/02 00:20, 13F
→
06/02 00:24, , 14F
06/02 00:24, 14F
→
06/02 00:24, , 15F
06/02 00:24, 15F
→
06/02 00:24, , 16F
06/02 00:24, 16F
→
06/02 00:25, , 17F
06/02 00:25, 17F
→
06/02 00:25, , 18F
06/02 00:25, 18F
→
06/02 00:25, , 19F
06/02 00:25, 19F
→
06/02 00:29, , 20F
06/02 00:29, 20F
→
06/02 00:49, , 21F
06/02 00:49, 21F
→
06/02 00:50, , 22F
06/02 00:50, 22F
→
06/02 00:51, , 23F
06/02 00:51, 23F
→
06/02 00:51, , 24F
06/02 00:51, 24F
推
06/02 01:22, , 25F
06/02 01:22, 25F
→
06/02 01:22, , 26F
06/02 01:22, 26F
→
06/02 01:36, , 27F
06/02 01:36, 27F
推
06/02 03:27, , 28F
06/02 03:27, 28F
推
06/02 08:04, , 29F
06/02 08:04, 29F
→
06/02 08:04, , 30F
06/02 08:04, 30F
→
06/02 10:06, , 31F
06/02 10:06, 31F
→
06/02 10:07, , 32F
06/02 10:07, 32F
→
06/02 10:07, , 33F
06/02 10:07, 33F
→
06/02 10:07, , 34F
06/02 10:07, 34F
→
06/02 10:08, , 35F
06/02 10:08, 35F
→
06/02 10:09, , 36F
06/02 10:09, 36F
→
06/02 11:16, , 37F
06/02 11:16, 37F
→
06/02 11:58, , 38F
06/02 11:58, 38F
→
06/03 14:15, , 39F
06/03 14:15, 39F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章