![](/img/trans.png)
[英]Is it possible to perform arithmetic operation on void pointer with sizeof?
[英]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);
類型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.