[英]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.