Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以通过使用其他变量为变量赋值而不更改其在C+中的值+;。?_C++ - Fatal编程技术网

C++ 是否可以通过使用其他变量为变量赋值而不更改其在C+中的值+;。?

C++ 是否可以通过使用其他变量为变量赋值而不更改其在C+中的值+;。?,c++,C++,我试图从varA和varB中为varC赋值,而不改变varA和varB的值。 但在为varC赋值时,varA和varB似乎会随着varC自动变化。 这是我的密码 #include <iostream> using namespace std; main () { int varA = 10 ; // a = 10 int varB = 10; // b = 10 cout << "The exact value of varA is: " <

我试图从varA和varB中为varC赋值,而不改变varA和varB的值。 但在为varC赋值时,varA和varB似乎会随着varC自动变化。 这是我的密码

#include <iostream>
using namespace std;
main ()
{
    int varA = 10 ; // a = 10
    int varB = 10; // b = 10
    cout << "The exact value of varA is: " << varA <<'\n';
    cout << "The exact value of varB is: " << varB <<'\n';
    int varC = (++ ++ ++ ++ ++ ++ ++ ++ ++ ++ varA) += (varC = ++varB);
    cout << "After assigning the value for varC The value of varA is: " << varA <<'\n';
    cout << "After assigning the value for varC The value of varB is: " << varB <<'\n';

    cout << "The assigned value of varC is: " << varC <<'\n';
    cout << "The sum of varA, varB and varC is: " << varA + varB + varC << '\n';
    return 0;
#包括
使用名称空间std;
主要()
{
int varA=10;//a=10
int varB=10;//b=10
cout如图所示:

预递增和预递减运算符递增或递减 值,并返回对结果的引用

递增运算符将在赋值varC之前进行求值,从而更改varA和varB的值。

递增前运算符
运算符+
递增操作数的值,然后返回对它的引用

operator+=
同样地将左侧的值增加到右侧的值,然后返回对其的引用


在表达式中,您多次调用这两个函数。您明确地告诉编译器您希望修改值。如果您只想在不修改操作数的情况下将数字相加,请使用
运算符+
,如果您想使其不可读,就这样吧。这样做之后,您的值是什么。您必须重新计算对它们进行ssign或编写代码。就像您已经做的那样
varA=-->(varA-=(varB=--varB));


我还在想你为什么要这样做。

int-varC=(++++++++++++++++++++++++++++++++++++++++++++++varA)+=(varC=++++++++++varB);
不,不要那样做。为什么。这太疯狂了你在做什么?这应该做什么
您正在递增您的变量。这是为了一些混淆竞赛吗?它们不会自动更改,它们正在更改,因为您显式递增它们。我知道这一点,但使用varA和varB为varC分配31并没有帮助,并且不更改varA和varBstill的值也不会解决,因为它正在更改值因为varA和varB分配了10的值。我们无法重新分配它,它会改变值。每次编写++或-,值都会增加或减少1。如果您不想这样做,然后更改代码,或者您可以使用上述方法以相同的方式取消所做的更改。@Саа我不会对逆向工程稍有帮助。而且你也意识到你的代码无论如何都会得到优化,很可能会得到相同的asm代码?@Сааа如果你真的需要加密东西,先去看一个关于代数的初学者讲座。然后是一个中级讲座。然后你可以继续进行正确的加密讲座。或者更好的是,去看一个库我甚至不确定你在这里想要实现什么——你想要保护的是变量的内容(比如存储的密码),而不是代码本身。如果变量在内存中是普通的,那么它可以被读取,不管创建它的代码有多么复杂。@Саааa即使这样,它也不会太麻烦。对于真正的混淆,你必须采取更大的措施,即在运行时加载加密代码,更改PE头等。这不是一项微不足道的工作,而且人们仍然需要c经常使用类似的框架。但这甚至不是重点:当您使用优化进行构建时,即
-O2
,那么所有这些都将产生相同的代码。如果您不使用优化进行构建,您的代码将非常慢。顺便说一句,在您编写此代码之前,您是否确保已关闭调试符号?这将导致更重要的是…@Саааa使用
运算符+
varC
赋值,而不更改
varA
varB
。因此,这个答案满足了你的问题。另一种方法是编写
varC=31;
。如果必须使用
varA
,请使用
varC=31+varA-varA;
,也就是你自己这个问题没有任何意义。