正如在这个问题中所讨论的,GCC定义了非标准的一元运算符&&来获取标签的地址.
为什么它定义一个新的运算符,而不是使用运算符的现有语义&和/或函数的语义(where foo和&fooboth都产生函数的地址foo())?
我的代码是:
#include <stdio.h>
#include <string.h>
void main()
{
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
// printing with different formats
printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A,A,A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B,B,B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n", B,B,B);
// Example of unary address operator (dereferencing) and a %x
// format string
printf("variable A is at address: %08x\n", &A);
Run Code Online (Sandbox Code Playgroud)
我在linux mint中使用终端编译,当我尝试使用gcc编译时,我收到以下错误消息:
basicStringFormatting.c: In function ‘main’:
basicStringFormatting.c:18:2: warning: …Run Code Online (Sandbox Code Playgroud) int[] numbers = new int[10];
numbers[9] = 10;
Console.Write(numbers[^1] == numbers[numbers.Count()-1]); //true
Run Code Online (Sandbox Code Playgroud)
Index of 如何^1返回数组中的最后一项?
^1C# 编译器中的含义是什么?
与 相比,它有性能优势吗numbers[numbers.Count()-1]?
今天,我偶然发现了一个谜语,这给我带来了新的惊喜。
我不认为下面的示例中的-1 [p]可以编译,但是可以。实际上,x最终为-3。
int x;
int array[] = {1, 2, 3};
int *p = &array[1];
x = -1[p]
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了-1 [pointer]之类的东西,但找不到任何东西。好的,我承认很难输入正确的搜索查询。谁知道为什么-1 [p]编译而X变为-3?
我试图在javascript中理解一元运算符,我在这里找到了这个指南http://wiki.answers.com/Q/What_are_unary_operators_in_javascript大部分都有意义,但我不明白的是以下示例将如何用于一个实际的代码示例:
+a;
-a;
Run Code Online (Sandbox Code Playgroud)
据我所知+ a; 意味着使变量成为a和-a的正值; 意味着使变量成为a的负值.我尝试了很多例子:
a = -10;
a = +a;
document.writeln(a);
Run Code Online (Sandbox Code Playgroud)
输出仍然是-10;
我也尝试过:
a = false;
a = +a;
document.writeln(a);
Run Code Online (Sandbox Code Playgroud)
输出为0;
这些一元运算符的实际代码示例是什么?
在我必须维护的项目中有以下一些Python代码:
# If the `factor` decimal is given, compute new price and a delta
factor = +factor.quantize(TWOPLACES)
new_price = +Decimal(old_price * factor).quantize(TWOPLACES)
delta = new_price - old_price
Run Code Online (Sandbox Code Playgroud)
这里的问题是+变量前面的目的.
Python文档调用它一元加运算,其"产生的数值参数不变".它可以安全地移除吗?
(顺便提一下,代码是我前一段时间编写的,希望我已经吸取了教训 - 如果测试存在,或者如果在评论中澄清使用小数一元加上,那么这不是一个问题.)
来自http://en.cppreference.com/w/cpp/language/operator_precedence的C++运算符优先级表(我知道它不是规范性的,但标准不讨论优先级或关联性)将一元运算符标记为右/左关联.
从对不同问题的讨论中,我怀疑.将一元运算符联合起来是否有意义?
直到现在我才相信没有使用一元+算子.
但后来我遇到了以下示例:
char ch;
short sh;
int i;
printf("%d %d %d",sizeof(ch),sizeof(sh),sizeof(i)); // output: 1 2 4
printf("%d %d %d",sizeof(+ch),sizeof(+sh),sizeof(i)); // output: 4 4 4
Run Code Online (Sandbox Code Playgroud)
这是否意味着+在这里进行类型转换?
因为它的行为与以下相同
printf("%d %d %d",sizeof((int)ch),sizeof((int)sh),sizeof(i)); // output: 4 4 4
Run Code Online (Sandbox Code Playgroud)
这迫使我认为+是在进行类型转换.
但后来我尝试了 double
double f;
printf("%d %d",sizeof(+f),sizeof((int)f),sizeof(f)); // output: 8 4 8
Run Code Online (Sandbox Code Playgroud)
这迫使我重新思考一元运算+符.
所以我的第二个问题是:一元+算子对算子有特殊影响sizeof吗?
+ =和= +之间有什么区别?具体来说,在java中,但一般而言.
今天我写了一个表达式:
"<" + message_id + "@" + + ">"
^
|
\____ see that extra '+' here!
Run Code Online (Sandbox Code Playgroud)
并且对它实际编译感到惊讶.(PS message_id是一个QString,它也适用于std :: string)
我经常做这样的事情,在我工作的时候遗漏一个变量,我希望编译器能告诉我在哪里我仍然缺少条目.决赛看起来像这样:
"<" + message_id + "@" + network_domain + ">"
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么+一元运算符对字符串文字有效!?