我只想尝试运行这一简单的代码:
struct Client {
int timeSinceLastPacket = 0;
sf::IpAddress ip;
unsigned short port = 0;
unsigned short id = 0;
};
不幸的是,增量后总会返回1。如果我在增量之前放置一个打印件,它将返回0.
这是我的结构:
arrowObj = arrow.Arrow.strptime('2017-02-20 10:00:00', '%Y-%m-%d %H:%M:%S' , 'US/Eastern')
arrowObj.to('UTC') or arrowObj.to('local')
我正在使用SFML。
以下是我尝试的内容:
代码不长,但我不想把它放在问题中。我会在这里链接到你:
答案 0 :(得分:10)
for (Client c : clients) {
在这里制作一份名为c
的副本。 clients
中的原文不受影响。
如果要改变原始元素,请使用引用:
for (Client& c : clients) {
答案 1 :(得分:4)
通过键入循环变量Client
,您可以在每次迭代时复制数组中的元素。循环内的更改会更新副本,而不是clients
中存储的原始项目。
改为使用它作为参考:
for (Client& c : clients) {
与Java或C#不同,C ++默认使用值类型而不是引用,因此必须明确声明您需要引用(或指针,但语法稍微混乱)。
如果类型很复杂,或者对其复制构造函数执行重要处理,则此处使用非引用类型也可能导致一些性能问题。 (这并不是您在此处概述的类型的关注点,但在其他情况下可能是一个问题。)