以下是做什么的?我认为+仅用于整数提升.
char c[20] = "hello";
foo(+c);
foo(+"hello");
Run Code Online (Sandbox Code Playgroud)
chr*_*ris 38
它强制数组衰减为指针,如§5.3.1[expr.unary.op]/7中间接所述:
一元+运算符的操作数应具有算术,无范围枚举或指针类型,结果是参数的值.对整数或枚举操作数执行整体提升.结果的类型是提升的操作数的类型.
您可能一开始看不到它,但由于数组不是列出的类型之一,因此必须将其转换为指针才能适合.从那里,返回指针的值.
在这两种情况下,foo(const char *)
都会选择a foo(const char(&)[N])
.对于一些有用的东西,您可以使用一元加,请参阅此答案.包括将枚举类型转换为整数并绕过链接问题.如你所说,它也可以用于整体推广.例如,unsigned char byte = getByte(); std::cout << +byte;
将打印数值而不打印字符.
一个简单的例子是:
char a[42];
cout << sizeof(a) << endl; // prints 42
cout << sizeof(+a) << endl; // prints 4
Run Code Online (Sandbox Code Playgroud)
小智 23
一元+
不仅定义为数字类型,还定义指针类型.但是,它没有为数组定义.
因此,foo(+c)
强制c
转换为指向其第一个元素的指针.如果foo
一个函数被定义为采用a char *
,则没有必要:它已经隐式发生了.但是,当你有重载时(可能通过模板函数),这很重要.
归档时间: |
|
查看次数: |
6502 次 |
最近记录: |