回答
它迫使阵列衰减到一个指针,如在间接指出§5.3.1[expr.unary.op]/7:
一元+运算的操作数应具有算术,非范型枚举或指针类型,并且结果是参数的值。整型提升在整型或枚举操作数上执行。 结果的类型是提升操作数的类型。
您可能一开始并不会看到它,但由于数组不是列出的类型之一,因此它必须转换为指针才能适合。从那里,返回指针的值。
在这两种情况下,foo(const char *)
将被选择在foo(const char(&)[N])
以上。有关可以使用一元加法的一些有用事例的示例,请参见this answer。包括将枚举类型转换为整数并解决链接问题。正如你所说,它也可以用于整体推广。例如,unsigned char byte = getByte(); std::cout << +byte;
将打印数字值,而不是字符。
一个直接的例子是:
char a[42];
cout << sizeof(a) << endl; // prints 42
cout << sizeof(+a) << endl; // prints 4
'会打印数字值而不是字符'...除非sizeof(char)== sizeof(int)',对吧? – fredoverflow 2014-09-06 15:18:47
@FredOverflow'char'和'unsigned char'总是被提升为'int'或'unsigned int',即使它们已经具有相同的大小。 – hvd 2014-09-06 15:21:56
这是C++中常见的习惯用法,还是有更好的方法来编写它(例如,演员表),使其更加明显地发生了什么? – 2014-09-07 04:24:06
一元+
数字类型不仅限定,同时也为指针类型。但是,它没有被定义为数组。
因此,foo(+c)
强制c
被转换为指向其第一个元素的指针。如果foo
是定义为采用char *
的函数,那么这不是必需的:它已经隐式发生了。但是,当你有重载(可能通过模板函数)时,它可能很重要。
- 1. 一元加减运算符的重要用途是什么?
- 2. Java Char数组的用途是什么?
- 3. Java中的= +运算符的用途是什么?
- 4. python中`//`运算符的用途是什么?
- 5. __builtin_offsetof运算符的用途和返回类型是什么?
- 6. 数组类型的用途是什么?
- 7. 将数组中的char元素与运算符进行比较
- 8. '&'在一个一元运算符中的含义是什么?
- 9. C++一元运算符在类上使用的是什么意思? (Class :: Class)
- 10. Ruby中的一元加运算符有什么意义?
- 11. Clojure元数据的一些用途是什么?
- 12. Python中//运算符的用途是什么,它是什么时候是明智的?
- 13. CSS中'@'符号的用途是什么?
- 14. 运算符在这里重载是什么:String8 :: operator const char *()const
- 15. 什么是Java“= +”运算符?
- 16. 什么是“===”运算符?
- 17. 什么是()=>运算符?
- 18. C++ - 什么是运算符。*?
- 19. GeofencingRequest上setInitialTrigger的用途是什么?
- 20. 什么是“运算符int”函数?
- 21. 运算符模块中`in`的等效运算符是什么?
- 22. const char和二元运算符错误
- 23. 奇怪的按位运算符组合的目的是什么?
- 24. `$ .support.ownLast`的用途是什么?
- 25. TPopupActionBar的用途是什么?
- 26. _GLOBAL__I_的用途是什么?
- 27. $ _POST的用途是什么?
- 28. “$ this”的用途是什么?
- 29. CreateSilverlight.js的用途是什么?
- 30. vertexAttribPointer的用途是什么?
这个最简单的情况是*正数lambdas *,它们完全一样将衰减到函数指针的lambda:'+ [](){}' – Manu343726 2014-09-07 07:00:57
@ Manu343726在您的表达式中,生成的函数指针是有效的?或者匿名lambda函数已经超出了范围?用代码表示,是'(* + [](){})()'valid? – Ponkadoodle 2014-12-21 07:58:41