看看下面的简单代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("1234567890");
string::iterator i1 = s.begin();
string::iterator i2 = s.begin();
string s1, s2;
s1.append(i1, ++i1);
s2.append(++i2, s.end());
cout << s1 << endl;
cout << s2 << endl;
}
Run Code Online (Sandbox Code Playgroud)
您对输出的期望是什么?
你会像我一样期望它是:
1
234567890
Run Code Online (Sandbox Code Playgroud)
错误!它是:
234567890
Run Code Online (Sandbox Code Playgroud)
即第一个字符串为空.
前缀增量运算符的接缝在迭代器中存在问题.还是我错过了什么?
我执行了以下代码.
int main(void)
{
int c;
c=0;
printf("%d..%d..%d \n", c,c,c);
c=0;
printf("%d..%d..%d \n", c,c,c++);
c=0;
printf("%d..%d..%d \n", c,c++,c);
c=0;
printf("%d..%d..%d \n", c++,c,c);
return 0;}
Run Code Online (Sandbox Code Playgroud)
我期望输出为
0..0..0
1..1..0
0..1..0
0..0..0
但是输出(用gcc编译)是
0..0..0
1..1..0
1..0..1
0..1..1
我的期望有什么问题?在gcc中,评估顺序是从右到左.是吗?
有人知道为什么负数需要括号的方式可以像人们在几种编程语言中所期望的那样,而不是在C语言中(或者在其他语言中)?
这是R中的一个例子:
> -5^2
[1] -25
> # now let's use parentheses
> (-5)^2
[1] 25
Run Code Online (Sandbox Code Playgroud)
Python中也发生了同样的事情:
>>> -5**2
-25
>>> (-5)**2
25
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,我们也可以在Ruby中尝试这个(使用http://repl.it/作为解释器):
> 5**2
=> 25
> -5**2
=> -25
> (-5)**2
=> 25
Run Code Online (Sandbox Code Playgroud)
但是,如果我们在C中实现这个短程序,那么负数不需要括号正确平方:
#include <stdio.h>
int main(void){
int number, product;
printf("\nEnter the number you want squared: ");
scanf("%d", &number);
product = number * number;
printf("Squared number: %d \n", product);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是C程序的输出:
Enter the number you want squared: 5
Squared number: 25
Run Code Online (Sandbox Code Playgroud)
接下来,我将使用负数: …
是否在计算表达式之后或在评估整个语句之后评估后缀增量/减量运算符?
#include<stdio.h>
void main()
{
int a=0;
int b=0;
printf("%d %d",a||b,b++); // Output is 1 0
}
Run Code Online (Sandbox Code Playgroud)
我的编译器从右到左评估printf参数.表达式a || b的答案是1,这意味着b在评估|| b之前已经递增(即b在评估表达式b ++之后立即递增)
我在这里阅读C++中的增量 - 何时使用x ++或++ x?在整个语句之后计算后缀增量/减量.
哪个是对的?
c parameter-passing expression-evaluation operator-precedence
C++ 中运算符的优先级和结合性是什么?
谁定义了运算符优先级和结合性,以及它与求值顺序有何关系?解释了这些属性如何从语法中出现。然而,我只是对所有规则的列表感兴趣。
这个问题应该是一个社区常见问题解答,可以参考而不是cppreference 文章。
我有一段简单的代码,没有达到我的预期.这段代码有什么问题?
int value1 = (int).5*100;
Run Code Online (Sandbox Code Playgroud)
这很容易,但通过我循环好一刻.当然,答案是微不足道的,已经知道了.但是,我认为有人思考可能会很有趣.
信用将给予第一个提出正确解决方案并解释原因的人.
这个表达式是等同于((A || B) && C)还是对(A || (B && C))?
例如:
设A = 1,B = 0,C = 0.这个表达的结果是什么?是0(案例1)还是1(案例2)?
我正在解决Hackerrank问题'最大化xor'.(https://www.hackerrank.com/challenges/maximizing-xor)
我使用'if'语句来检查i xor j是否大于'max',如代码所示.
static int maxXor(int l, int r) {
int max=0;
for(int i=l;i<r;i++)
for(int j=l;j<r;j++)
{
if(i^j>max)/*error part*/
max=i^j;
}
return max;
}
Run Code Online (Sandbox Code Playgroud)
但为什么我会收到此错误?
对于参数类型int,boolean',运算符^未定义
考虑这个表达式:
x1 = ++x - x++ + --x
Run Code Online (Sandbox Code Playgroud)
如果输入 x 的值 5
java中这种表达式的输出是什么,为什么?
我在一个我开始研究的项目中遇到了这段代码.最初的开发人员已经不再可用,我无法理解它.
k = (j = (i = 0) + 2) + 1;
return i|= j|= k|= (j+= i) - - (k+++k) - - (i =+j);
Run Code Online (Sandbox Code Playgroud)
它产生的价值11.这是如何运作的?
什么是=+运营商?
什么是+++运营商?
什么是- -运营商?
什么是|=运营商?