1樓:幻夢·人生
返回值不能作為區分函式的標誌。比如說在函式過載中,不同形引數目,不同形參型別都可以過載,但是不同函式返回值,就不能過載。因為編譯器無法區分兩個函式的差別。
模板有同樣的問題,函式呼叫時完全可以不獲取返回值,那這種情況讓編譯如何自處。如果強制必須使用返回值,就違法了c++的基本原則,並不合理。所以無法推導返回值也是可以理解的了。
2樓:時空魔法
template 這個就是返回值型別
c++ template 為什麼不能推導返回值型別
3樓:lsz**凌波飛翔
為了儘可能與 c 保持語法和語義上的相容性,在 c++ 中,對於函式的呼叫方而言,返回值總是可以忽略的。
也就是說,對於給定的函式
int foo()
呼叫方可以這麼寫:
foo(); // 忽略返回值
對於模版函式而言,如果依賴返回值做模板的型別推導,就會出現由於呼叫資訊不全導致的二義性。
還是剛才這個例子,我們改為對應的函式模版,template
t foo()
假如我們允許藉助返回值來推導(如下所示)
int a = foo(); // 特化為 foo()double b = foo(); // 特化為 foo()那麼當呼叫方像之前的例子那樣調的時候,編譯器就沒辦法處理了:
foo(); // 報錯,因為缺乏足夠資訊做模板例項化總結一下,一句話結論——「為了與c保持相容,返回值並非是呼叫函式時的必要條件,因此函式模版型別推導和函式過載都不能且不應依賴返回值。」
c++關於模板類函式返回值
4樓:風雷雪電
請問你要返回哪個類的物件?返回什麼型別就寫什麼就行了,以下寫法都是可以的:
#include
#include
using namespace std;
template
class car
};int main()
好像在類裡都可以省略,我在dev-cpp 4.9.9.2和visual studio 2012裡都編譯過了,如下:
car show()
;template
class car
};總之就是想要返回什麼就寫什麼就行了。
如果沒講到你想知道的,就把問題寫清楚點繼續追問。
5樓:
很明顯,書中有點錯誤,按原意***應該寫car
當然,如果你想返回其他型別,比如int,你也可以用int來代替
還有不明白請追問..好的話贊一個吧
6樓:東哥
c++ 11 還不支援
模板函式返回值 型別自動推導,新的標準可能會支援,目前主流的 編譯器 應該都不支援。
此處可使用:
template
a plus(a a,a b)
c++:
c++是在c語言的基礎上開發的一種物件導向程式語言,應用廣泛。c++支援多種程式設計正規化 --物件導向程式設計、泛型程式設計和過程化程式設計。最新正式標準c++14於2023年8月18日公佈。
[1] 其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:類、封裝、過載等特性。
關於c++模板函式返回值的問題
7樓:匿名使用者
c++ 11 還不支援 模板函式返回值 型別自動推導,新的標準可能會支援,目前主流的 編譯器 應該都不支援。
此處可使用:
template
a plus(a a,a b)
8樓:97樂於助人
因為主函式裡面呼叫了grade函式,而grade函式裡面有輸出語句,所以會有書上的結果。
並不是返回給了主函式值。
9樓:匿名使用者
template
auto plus(a a,a b);
直接寫成返回 為 a型別的就行了
template
a plus(a a,a b);
在定義中也做相應更改。
漢武帝為什麼實行推恩令
公元前127年 漢武帝元朔二年 漢武帝採納主父偃的建議,頒佈 推恩令 規定諸侯王除以嫡長子繼承王位外,可以推恩將自己封地分給子弟,由皇帝制定封號。使諸侯王多分封子弟為侯,使王國封地被分割,以進一步削弱諸侯王國勢力 其次建立中朝削弱相權,鞏固了皇權的神聖地位 漢朝推恩令是中國封建社會史上的一項制度,推...
鐵三角msr7吃不吃前端?手機直推能不能推得動?索尼mdr1a呢
msr7的阻抗在35歐這樣子,手機推的話是可以推的動,但不一定能推的好,推個7分飽還是可以的,如果真想玩hifi還是得上放,手機大多數情況下都只是聽個響而已,mdr1a的阻抗更小,只有24歐,更適合手機 鐵三角msr7吃不吃前端?手機直推能不能推得動?索尼mdr1a msr7的阻抗在35歐這樣子,手...
為什麼窗門只能從內往外推呢
室內空間更大,而且方便安裝窗簾。窗戶,在建築學上是指牆或屋頂上建造的洞口,用以使光線或空氣進入室內。早在中國隋代,洛陽皇宮紫微城內的觀文殿就出現了可以自動開合的窗戶。事實上窗和戶的本意分別指窗和門,在現代漢語中窗戶則單指窗。窗 本作 囪 囪 為俗字 即在牆上留個洞,框內的是窗櫺,可以透光,也可以出煙...