簡體   English   中英

算術運算是否無效?

[英]Arithmetic operation with a void?

我知道,如果可能的話,以下做法絕對是錯誤的做法,但我想知道是否可行。

問題如下:在C ++中(以某種方式編譯器不會引發任何警告),是否有可能執行無用的算術運算,而函數會返回一個void。

std::vector<int> v;
int i = 42 + v.resize(42); 
/* How to transform the last line to execute resize and to have i = 42 */

我知道這很愚蠢,但這不是問題。

我不確定這是否有意義,但是您可以在此處使用逗號運算符

int i = (v.resize(42), 42);

您可以使用逗號運算符

int i = (v.resize(42), 42);

GCC中,您可以使用其語句表達式擴展名:

int i = ({v.resize(42); 42;})

在標准C ++ 11中,您可以使用並調用匿名閉包

int i = ([&v]() {v.resize(42); return 42;}());

類型void沒有值,因此可能無法在算術表達式中使用。

我認為成員函數resize的設計不好。 它應該返回對象本身,而不是void 在這種情況下,您可以寫例如

int i = v.resize(42).size(); 

我在討論C ++標准的論壇中指出了這一點。

至於你的問題,你可以寫

int i = ( v.resize(42), v.size() );

使用逗號運算符。

或者將這兩個電話分開可能會更好

v.resize(42);
int i = v.size();

看不到重點,但這是另一種方式

std::tie(i, std::ignore) = std::make_tuple(42, (v.resize(42),1) );

您也可以執行以下操作:

if ((i=42)) v.resize(42); 

別忘了

do { v.resize(42); } while (!(i=42)); 

和最喜歡的

(i=42) ? v.resize(42) : i;

或(帖子中唯一的嚴重C ++

int i(0);
std::vector<int> v(i=42);

來吧,這沒有止境

.....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM