C ++初学者分配操作符

时间:2016-08-31 15:40:42

标签: c++ operators variable-assignment

我是C ++的初学者,我正在做这个示例的赋值运算符代码。我不知道我在这里做错了什么。

import maya.OpenMaya as om
sel = om.MSelectionList()
om.MGlobal.getActiveSelectionList(sel)
dag = om.MDagPath()
comp = om.MObject()
sel.getDagPath(0, dag, comp)
itr = om.MItMeshFaceVertex(dag, comp)
print '| %-15s| %-15s| %-15s' % ('Face ID', 'Object VertID', 'Face-relative VertId')
while not itr.isDone():
    print '| %-15s| %-15s| %-15s' % (itr.faceId(), itr.vertId(), itr.faceVertId())
    itr.next()

我正在获得

的结果
#include <iostream>

using namespace std;
int main()
{
    int x = 200; int y = 100;
    x += y; cout << x << endl; //x += y; // x = x + y, x = 200 + 100, output 300.
    x -= y; cout << x << endl; //x -= y; // x = x - y, x = 200 - 100, output 100.
    x /= y; cout << x << endl; //x /= y; // x = x / y, x = 200 / 100, output 2.
    x %= y; cout << x << endl; //x % y; // x = % y, x = 200 % 100, output 0.
    return 0;
}

当它假设是

x -= y = 200
x /= y = 2
x %= y = 2

它实际上将以前的结果加起来。如何阻止代码将结果添加到下一行?谢谢!

7 个答案:

答案 0 :(得分:3)

xy是变量而U是一个操作x U= y相当于:

x = x U y;

表示正在修改原始变量并为其分配结果。

您的代码相当于:

x = x + y;
cout << x << endl; // x is now 300
x = x - y;
cout << x << endl; // x is now 200
x = x / y;
cout << x << endl; // x is now 2
x = x % y;
cout << x << endl; // x is now 2

如果您不想更改x,您可以将x保存在临时变量中,或者只打印结果:

int x = 200;
int y = 100;
cout << x - y << endl; // x unchanged
cout << x + y << endl; // x unchanged
cout << x / y << endl; // x unchanged
cout << x * y << endl; // x unchanged

或者:

int x = 200;
int x = 100;
int result = x + y;
cout << result << endl;
result = x - y;
cout << x << endl;
result = x / y;
cout << result << endl;
result = x % y;
cout << result << endl;

注意:由于=运算符在赋值cout << x += y << end可以编译并打印指定值后返回值。

答案 1 :(得分:3)

正如您在代码中的评论中所提到的,x += y的结果相当于x = x + y,这意味着x的值会发生变化。因此,x,300的新值在下一个数学作业中使用也就不足为奇了。

如果您想避免这种情况,请考虑将x + y的结果保存到另一个变量。

int x = 200;
int y = 100;
int x_addition = x + y;
std::cout << x_addition << std::endl;

或者,如果它的唯一用途是显示添加的结果,请在一行中完成。

int x = 200;
int y = 100;
std::cout << x + y << std::endl;

答案 2 :(得分:2)

每次执行x += y;之类的作业时,都会更改x的值。

x += y;

相当于

x = x + y;

这意味着分配。 x的值正在变化。它现在是300.同样的事情也发生在后来的任务中。

注意:如果你不想改变x和y的值,最好在其他变量中进行赋值。

int x = 200, y = 100, t;
t = x + y; cout << t << endl;
t = x - y; cout << t << endl;
t = x * y; cout << t << endl;
t = (int) x / y; cout << t << endl;

答案 3 :(得分:1)

尝试在每次分配后将x重置为200。像这样:

#include <iostream>

using namespace std;
int main()
{
    int x = 200; int y = 100;
    x += y; cout << x << endl; 
    x = 200;
    x /= y; cout << x << endl; 
    x = 200;
    x %= y; cout << x << endl; 
    return 0;
}

答案 4 :(得分:1)

您希望永久保留<table> <tr><th>Test Columns</th><th>Header 2</th></tr> <tr><td>Test Value</td><td>Test 2</td></tr> </table> x的原始值,但它不是。 yx += y;等分配会更改变量的值(在本例中为x = x + y;,即等号左侧的变量)。之前的值会被覆盖,因此会丢失。

如果您不想更改原始值,则必须将结果分配给其他变量(例如,一个名为x的变量,每次都可以覆盖),或者您不要#39; t完全分配它,你只需将temp发送给计算结果。

作为临时变量的示例:

cout

或者,完全废除变量:

int x = 200; int y = 100; int temp;
temp = x + y; cout << temp << endl; //temp = x + y, temp = 200 + 100, output 300.
temp = x - y; cout << temp << endl; //temp = x - y, temp = 200 - 100, output 100.

另一种看待变量被覆盖的方法(好吧,在这种情况下它只是cout << x + y << endl; // 200 + 100, output 300 cout << x - y << endl; // 200 - 100, output 100 )是将它们声明为x

const

程序不会编译,因为它试图改变常量变量。

答案 5 :(得分:1)

您正在使用累积运算符,因此您需要更改&#39; x&#39;。

的值。
x += y; // x = 200 + 100 = 300
x -= y; // x = 300 - 100 = 200
x /= y; // x = 200 / 100 = 2
x %= y; // x = 2 % 100 = 2

相反,你可以这样做:

    int x = 200;
    int y = 100;
    cout << x + y << endl;
    cout << x - y << endl;
    cout << x / y << endl;
    cout << x % y << endl;

或者:

    int x = 200;
    int y = 100;
    int result;

    result = x + y;
    cout << result << endl;

    result = x - y;
    cout << result << endl;

    result = x / y;
    cout << result << endl;

    result = x % y;
    cout << result << endl;

答案 6 :(得分:0)

您不依赖于加法运算值

x=200,y=100;    
x+=y;//x=200+100=300,x=300,y=100   
x-=y;//x=300-100=200,x=200,y=100    

这里你忘记了扣除之前有 ADDITION 操作