相关疑难解决方法(0)

传递参考与传递值之间有什么区别?

有什么区别

  1. 通过引用传递的参数
  2. 一个由值传递的参数?

你能给我一些例子吗?

language-agnostic pass-by-reference pass-by-value

539
推荐指数
11
解决办法
65万
查看次数

201
推荐指数
6
解决办法
6万
查看次数

为什么预增量运算符在C中给出rvalue?

在C++中,预增量运算符给出左值,因为返回了递增的对象本身,而不是副本.但在C中,它给出了右值.为什么?

c c++ rvalue lvalue

28
推荐指数
1
解决办法
1949
查看次数

实际使用C++前缀增量运算符返回左值的事实

我刚刚了解到C++中前缀增量运算符的结果是左值.有可能这种行为有助于程序员更有效,但我想不到任何.前缀增量运算符的这种行为有哪些惯用的用法?

c++ c++11

8
推荐指数
2
解决办法
297
查看次数

后增量运算符++

cout<<(x++)++; //fails 
cout<<++(++x); //passes
Run Code Online (Sandbox Code Playgroud)

为什么后期增量失败?我看到它发生但不确定技术原因.

c++

7
推荐指数
1
解决办法
718
查看次数

C和C++中前缀增量运算符之间的差异

我刚刚阅读了关于前缀增量运算符C引用,并意识到前缀增量运算符的结果不是左值,但令人惊讶的是它在C++中是左值.之后我读了这个答案,解释了为什么它是一个左值,但我不明白它:

(第3行):["]看起来它是这样你可以取其地址或分配给参考.[."]

以下是一个例子:

int i;
extern void f (int* p);

f (&++i);   /* Would be illegal C, but C programmers
              havent missed this feature */
...
Run Code Online (Sandbox Code Playgroud)

那么允许这个有什么好处呢?i在全球范围内增加的唯一目的是非法的吗?如果这是我认为这可以解决C中缺陷(无法/难以解决)的唯一原因,或者为了可读性而应该重写程序,对吧?

顺便说一句我不明白为什么左值也被称为"定位器值",我读过这个 - 第4行,但定位器对我来说很模糊.什么是定位器,它是指针吗?

编辑:为了您宝贵的时间阅读关于wth是定位器值,这是我自制的backronym:

  • 左值:位置值,你知道它的位置.
  • rvalue:读取值,您只能读取该值.

如果出了什么问题,不要怪我.

c c++

7
推荐指数
1
解决办法
207
查看次数

为什么`++ a ++`不是用C++编译而是`(++ a)++`呢?

标题说的是什么.对于C++,(++a)++编译.但奇怪的是,++(a++)不是:

int main() {
    int a = 0;
    ++a++; // does not compile
    (++a)++; // does compile
    ++(a++); // does not compile
}
Run Code Online (Sandbox Code Playgroud)

但在Java中,并不是所有三个:

public class Test {
    public static void main(String[] args) {
        int a = 0;
        ++a++; // does not compile
        (++a)++; // does not compile
        ++(a++); // does not compile
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有理由为什么C++编译它而不是Java?

c++ java rvalue lvalue

6
推荐指数
1
解决办法
641
查看次数

在同一变量上混合后置和递增/递减运算符

可能重复:
为什么++ i被认为是l值,但i ++不是?

在C++(以及C语言)中,如果我写:

++x--
++(x--)
Run Code Online (Sandbox Code Playgroud)

我得到错误:左值作为增量操作数

然而(++x)--编译.我很迷惑.

c c++ increment decrement

4
推荐指数
1
解决办法
921
查看次数

增量++ i,i ++和i + = 1

我是C++的初学者.我的理解是: -

i ++首先执行,然后递增,++ i先递增,然后执行,i + = 1递增1,然后执行.但是在FOR循环中:

for (i=0;i<10;i++)
for (i=0;i<10;++i)
Run Code Online (Sandbox Code Playgroud)

上面这两个循环确实没有区别.

这是另一个计算从1到100的所有整数的总和:

int i=1, sum=0;
while (i<=100)
{
    sum+=i;
    i++;         //i+=1;    ++i;
}
cout<<sum<<" "<<i<<endl;
return 0;
Run Code Online (Sandbox Code Playgroud)

但是如果我用i + = 1或++ i替换i ++,它们都会返回5050和101的总和.所以我真的看不出它们有什么不同.

所以有人可以向我解释这个吗?编程中哪一个最常用?谢谢!!

c++ for-loop increment

2
推荐指数
1
解决办法
1万
查看次数

Postfix和前缀增量导致错误

为什么该代码由于错误而无法编译:

#include <iostream>

using namespace std;

int main()
{
    int i = 0; 
    cout << ++(i++) << " " << i << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然该代码确实编译:

#include <iostream>

using namespace std;

int main()
{
    int i = 0; 
    cout << (++i)++ << " " << i << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白这个.从我的观点来看,编译第一个块是非常合理的.表达式++(i ++)只是意味着取i,递增它并输出,然后再递增它.

我不是在询问int溢出中的未定义行为.在写这个问题时我根本不知道r和l值,我不在乎为什么++我被认为是l值,但i ++不是.

c++ increment postfix-notation prefix-notation

2
推荐指数
1
解决办法
463
查看次数

为什么if(++ x = ++ y)有效,if(x ++ = ++ y)不起作用?

当我执行这个程序时:

#include<iostream>
using namespace std;
int main(){
    int x=5,y=9;

    if(++x=y++){
        cout<<"Works "<<x;
    }
    else{
        cout<<"No";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,输出是:Works 9

但如果我执行:

  #include<iostream>
using namespace std;
int main(){
    int x=5,y=9;

    if(x++=y++){
        cout<<"Works "<<x;
    }
    else{
        cout<<"No";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它声明:在函数'int main()'中:6:11:错误:左值作为赋值的左操作数,如果(x ++ = y ++){

c++ operators

-3
推荐指数
1
解决办法
1520
查看次数