簡體   English   中英

char數組上一元加運算符的用途是什么?

[英]What is the purpose of unary plus operator on char array?

以下是做什么的? 我認為+僅用於整數提升。

char c[20] = "hello";
foo(+c);
foo(+"hello");

它強制數組衰減為指針,如§5.3.1[expr.unary.op] / 7中間接所述:

一元+運算符的操作數應具有算術,無范圍枚舉或指針類型,結果是參數的值。 對整數或枚舉操作數執行整體提升。 結果的類型是提升的操作數的類型。

您可能最初看不到它,但由於數組不是列出的類型之一,因此必須將其轉換為指針才能適合。 從那里,返回指針的值。

在這兩種情況下,都會選擇foo(const char *)而不是foo(const char(&)[N]) 對於一些有用的東西,您可以使用一元加,請參閱此答案 包括將枚舉類型轉換為整數並繞過鏈接問題。 如你所說,它也可以用於整體推廣。 例如, unsigned char byte = getByte(); std::cout << +byte; unsigned char byte = getByte(); std::cout << +byte; 將打印數值而不打印字符。


一個簡單的例子是:

char a[42];
cout << sizeof(a) << endl;  // prints 42
cout << sizeof(+a) << endl; // prints 4

一元+不僅為數字類型定義,還為指針類型定義。 但是,它沒有為數組定義。

因此, foo(+c)強制c轉換為指向其第一個元素的指針。 如果foo是一個定義為接受char *的函數,那就沒有必要了:它已經隱式發生了。 但是,當你有重載時(可能通過模板函數),這很重要。

暫無
暫無

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

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