int plus plus和int plus之间的差值等于1

时间:2013-12-05 11:12:02

标签: ios objective-c

所以我试图用我的sqlite数据库中的行填充一个对象,如下所示:

- (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)db
{
   self.valueX = sqlite3_column_int(row, 0);
   self.valueY = sqlite3_column_int(row, 1);
   self.valueZ = sqlite3_column_int(row, 2);
   //etc
   return self;
}

由于在数据库迁移后添加了很多属性并且添加了更多属性,因此我尝试将其设置为智能助手并将代码更改为:

- (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)db
{
   int i = 0;
   self.valueX = sqlite3_column_int(row, i);
   self.valueY = sqlite3_column_int(row, i++);
   self.valueZ = sqlite3_column_int(row, i++);
   //etc
   return self;
}

然而,这不起作用,但如果我将其更改为sqlite3_column_int(row, i+=1);,它似乎确实有效。

所以我的问题是:i++i += 1之间有什么区别?

3 个答案:

答案 0 :(得分:2)

我明白了! 似乎i++首先返回i的当前值,然后才将其加1。虽然i+=1首先添加了数字,但只返回i的值。因此,如果我只是将代码更改为此,则一切正常:

- (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)db
{
   int i = 0;

   //i++ instead of i, 0 is the returned value here and not 1 as I expected:
   self.valueX = sqlite3_column_int(row, i++); 

   self.valueY = sqlite3_column_int(row, i++);
   self.valueZ = sqlite3_column_int(row, i++);
   //etc
   return self;
}

我希望我能用这个来节省一些时间

答案 1 :(得分:2)

i += 1;只是i = i + 1;

的简写

i++称为后增量。它在表达式中返回i的值,然后递增它。它的对应物是++i,称为预增量。它在表达式中递增i

答案 2 :(得分:2)

i++是后缀表示法,此处i仅在语句执行后递增。

i+=1扩展为i = i+1时,此处i会在同一语句中递增。您也可以使用++i前缀表示法来实现此目的。