1樓:XZiar
operator返回乙個double*或者不就夠了,使用時裡的第二個是指標自帶。
不過存多維陣列的話我還是推薦扁平化……
C++怎麼實現效率盡可能高地帶邊界檢查的多維陣列模板類?
2樓:果凍蝦仁
與其過載不如過載()。你所需要的操作它都能滿足,而且也不失優雅。
這種表達,很容易聯想到一種資料型別,那就是矩陣:Matrix。
而關於Matrix該如何優雅的過載運算子。isocpp官方恰好有個demo,那就是過載 operator () 而不是:
class
Matrix
;inline
Matrix
::Matrix
(unsigned
rows
,unsigned
cols):
rows_
(rows),
cols_
(cols
)//, data_ ← initialized below after the if...throw statement
inline
Matrix
::~Matrix
()inline
double
&Matrix
::operator()(
unsigned
row,
unsigned
col)
inline
double
Matrix
::operator()(
unsigned
row,
unsigned
col)
const
intmain
()引用自:https://
isocpp.org/wiki/faq/ope
rator-overloading#matrix-subscript-op
的通過中間類還能實現。假如你日後需要呢?這並不稀奇,比如表示更高維的向量空間。
operator ()比之其他operator的一大好處就是不限制引數個數,並且()看著也並不突兀。
3樓:
class A{
public:
double mArray[2][2];
double* operator (int indexreturn mArray[index
木考慮越界,方式上可以這樣實現(我在自己機器上可以通過)
4樓:d41d8c
←_← 想好了,支援a[0][0]就意味著(a[0])[0]和(auto&& r) (a[0])都要有同樣的語義。尤其是後乙個,使用者可能會拿r做各種各樣的操作,作為實現者要想好哪些操作有什麼後果。
如果不想承受這種心智負擔的話,還是不要支援這種寫法為好。a.at(0, 0)也沒多長。
支援a[0][0]的方式其他答主都解釋過了,就是讓operator返回乙個proxy。
5樓:Milo Yip
需要乙個 helper 類,大約是:
class
ARowHelper
public
:double
&operator
(size_tc)
};classA};
實際上還要考慮 const-ness 等問題。
python如何實現左側的運算子過載?
Kittyhawk 先從myob 1說起,假設myob屬於Myob類,這裡我們過載了 mul class Myob def mul self val print mul 過載了 mul 後我們就可以順利實現myob 1,結果是列印出 mul 但如果把兩者換一下位,1 myob,就會報錯了。這是因為1...
C 輸出運算子過載,為什麼要返回引用才能實現連續輸出?返回物件不可以實現連續輸出嗎?
石大頭 其他答主說得很好了。題主應該更進一步體會值語義和物件語義的區別,物件語義天生是不支援拷貝的。比如說Person laowang laowang 拷貝一下難道代表有兩個老王嗎 回答最長的那個我覺得太複雜了。為什麼要返回引用其實很簡單,輸出運算子 是乙個運算子,跟算術運算子 一樣,有著相應的規則...
python的邏輯運算子 and,or,not 和普通的邏輯運算子( )有何區別?
追遠 J 先糾正題主的乙個小錯誤。跟 同屬一家的運算子應該是 而非 這個問題還挺有意思 對問題本身的回答其實並不複雜 原則上講,and,or,not針對布林值 True False 進行運算,就是字面上的與或非的功能,確實可以稱之為邏輯運算子 類似C C 中的 而 則對應C C 中所謂的 按位運算子...