这段代码是如何工作的?

时间:2010-11-26 18:07:33

标签: c++ post-increment pre-increment

我正在寻找c ++ for dummies并找到了这段代码

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

int nextStudentId = 1000; // first legal Student ID
class StudentId
{
public:
StudentId()
{
    value = nextStudentId++;
    cout << "Take next student id " << value << endl;
}

// int constructor allows user to assign id
StudentId(int id)
{
    value = id;
    cout << "Assign student id " << value << endl;
}
protected:
int value;
};

class Student
{
public:
Student(const char* pName)
{
     cout << "constructing Student " << pName << endl;
     name = pName;
     semesterHours = 0;
     gpa = 0.0;
 }

protected:
string    name;
int       semesterHours;
float     gpa;
StudentId id;
};

int main(int argcs, char* pArgs[])
{
// create a couple of students
Student s1("Chester");
Student s2("Trude");

// wait until user is ready before terminating program
// to allow the user to see the program results
system("PAUSE");
return 0;
}

这是输出

  

接下来的学生编号1000

     

建立学生切斯特

     

下一个学生ID 1001

     

构建学生特鲁德

     

按任意键继续。 。

我很难理解为什么第一个学生ID是1000,如果值加一个然后将其打印出来

这是否有意义

在studentId的构造函数中,两行代码取nextStudentId并添加一行然后打印出来

输出不会是这样的:

  

下一个学生ID 1001

     

建立学生切斯特

     

接下来的学生ID 1002

     

构建学生特鲁德

     

按任意键继续。 。

希望你得到我想说的话

感谢

5 个答案:

答案 0 :(得分:9)

++是 post -increment运算符: first 读取值(并将其分配给变量),只有然后递增它。

将此与 pre -increment运算符对比:

value = ++nextStudentId;

这会产生你期望的行为。

请查看此问题以获取更多信息:Incrementing in C++ - When to use x++ or ++x?

答案 1 :(得分:5)

value = nextStudentId++;

这使用所谓的后增量运算符。执行nextStudentId++将首先使用nextStudentId的当前值value,然后 增加它。因此,第一次,value将为1000,nextStudentId将立即成为1001,依此类推。

如果您改为:

value = ++nextStudentId;

这是预增量运算符,您将看到之前的预期。

答案 2 :(得分:4)

在C和C ++中,递增(和递减)运算符以两种形式出现

  1. 前缀 - ++对象
  2. sufix - Object ++
  3. 前缀形式递增然后返回值,但是后缀形式获取值的快照,增加对象然后返回先前拍摄的快照。

    T& T::operator ++(); // This is for prefix
    T& T::operator ++(int); // This is for suffix
    

    请注意第二个运算符有一个伪int参数,这是为了确保这些运算符的不同签名。

    您可以覆盖这些运算符,但它确保在重写的实现中维护语义以避免混淆。

答案 3 :(得分:1)

试试这个

value = ++nextStudentId;

答案 4 :(得分:1)

你知道运算符“x ++”和“++ x”是如何工作的吗?

“x ++”首先返回x的值,然后递增x

例如:

int x = 1;
std::cout << x++ << std::endl; // "1" printed, now x is 2
std::cout << x << std::endl; // "2" printed

“++ x”首先递增x,然后返回递增值

int y = 1;
std::cout << ++y << std::endl; // "2" printed, y is 2
std::cout << y << std::endl; // "2"