![](/img/trans.png)
[英]cannot convert ‘std::string’ to ‘char**’ for argument ‘1’ to ‘__ssize_t getline(char**, size_t*, FILE*)’
[英]Cast ssize_t or size_t
在我在項目中使用的源文件中, ssize_t
和size_t
變量之間進行了比較:
ssize_t sst;
size_t st;
if(sst == st){...}
我想擺脫警告:
warning: comparison between signed and unsigned integer expressions
但我不確定,我應該向另一個轉變哪個變量?
if((size_t)sst == st){...}
要么
if(sst == (ssize_t)st){...}
什么是更安全,更好,更清潔? 謝謝
這個問題沒有一個正確的答案。 有幾種可能的答案,取決於您對這些變量可能采用的值的先驗知識。
如果你知道sst
是非負的,那么你可以安全地將sst
為size_t
,因為這不會改變值(順便說一下,如果你根本沒有sst
轉換就會發生這種情況)。
如果sst
可能是負數但您知道st
將永遠不會大於SSIZE_MAX
,那么您可以安全地將st
為ssize_t
,因為這不會更改該值。
如果sst
可能是負數,並且st
可能大於SSIZE_MAX
,則兩個SSIZE_MAX
都不正確; 任何一個都可能改變該值,導致不正確的比較。 相反, if (sst >= 0 && (size_t)sst == st)
。
如果您不確定前兩種情況之一是否適用,請選擇第三種選項,因為它在所有情況下都是正確的。
只要兩個值都適合ssize_t
的正可表示范圍,兩者都可以正常工作。
如果任何一個值沒有 ,你可能會遇到麻煩 - 在測試相等性之前檢查這些情況:
if ((sst >= 0) && (st <= SSIZE_MAX) && (sst == (ssize_t)st))
{
...
}
(我確信C ++人員會建議你完全避免使用C風格的演員 - 我毫不懷疑有人會發表評論或回答,讓你知道在C ++中這樣做的正確方法。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.