【发布时间】:2014-09-18 16:14:50
【问题描述】:
为什么下面的代码中有一个原子变量? - 因为它是从多个线程更新 m_subscriptions 数组的更大代码库的一部分。请耐心等待我 ..
这是我的问题:
#include <iostream>
#include <atomic>
#include <algorithm>
#include <iterator>
#define MAX_SUBSCRIPTIONS 45
static std::atomic<int> numberOfSubscriptions;
int main ()
{
int m_subscriptions[MAX_SUBSCRIPTIONS] = {};
numberOfSubscriptions.fetch_add(0, std::memory_order_relaxed);
m_subscriptions[numberOfSubscriptions] = 12;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 13;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 14;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 15;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 16;
numberOfSubscriptions.fetch_add(1);
for ( int i = 0; i < numberOfSubscriptions; i++ )
std::cout << m_subscriptions[ i ] << "\t ";
std::cout << std::endl;
auto result = std::find(m_subscriptions, m_subscriptions + numberOfSubscriptions, 44);
if ( result == std::end(m_subscriptions) )
std::cout << "Not Found" << std::endl;
else
std::cout << *result << std::endl;
}
当我传递数组中不存在的东西时,不打印“未找到”。
如果我将if ( result == std::end(m_subscriptions) ) 替换为
if ( result == (m_subscriptions + numberOfSubscriptions) )
有用 !
怎么样??
std::find 是如何知道m_subscriptions 中有多少个值被初始化的?它是否应该一直持续到最后,即 m_subscriptions[MAX_SUBSCRIPTIONS] 就像人们期望一台愚蠢的计算机那样?
换句话说,为什么std::find 在m_subscriptions + numberOfSubscriptions 处停止搜索44?为什么直到m_subscriptions[MAX_SUBSCRIPTIONS] 才继续?
【问题讨论】:
-
您使用
m_subscriptions, m_subscriptions + numberOfSubscriptions调用它。你希望它做什么? -
这个问题似乎是题外话,因为它是关于标准行为的忽视
-
这并没有使它偏离主题。这是一个很好的问题,已经得到了回答。
标签: c++ arrays stl standard-library