如何"do, if expression increased"?
How to "do, if expression increased"?
我有比特币源代码(多线程),我打算添加一些新行。在比特币网络上,数据消息在矢量中存储的地方进行交换。每当向量大小增加时,我想实现一些指令:
我如何在C++中编写以下模式,以便在if:中执行语句
if ("vVector.size() did not increase")
//*instruction*
注:vVector会不时自动递增。它实际上是另一个载体的克隆,它收集东西并在我没有控制权的情况下扩展
编辑:
当我这样做时:
if (!(vVector.size()++))
//do whatever is here
我得到以下错误:增量操作数所需的左值
vVector由在单独的头文件中声明的函数填充在同一cpp文件的另一个函数中。
下面是一个代码片段,其中有一个简短的描述:http://hastebin.com/amisuvafab.coffee
int init_size = v.size();
...
if(init_size == v.size()) {
// do whatever is here
}
编辑时:
只有在std::vector
中插入元素时,它的大小才会增加。因此,vVector.size()++
一开始就没有意义。
出现错误的原因是,执行if(!(vVector.size()++))
是非法的。std::vector::size
成员函数将返回rvalue
,而不是增量后operator++
所需的lvalue
。现在,关于rvalue
和lvalue
之间的区别,请参阅此链接。
就像这个一样简单
int prevSize = vVector.size();
// do something here
if (vVector.size() == prevSize) {
// do whatever is here.
}
编辑
if (!(vVector.size()++))
这种说法显然是错误的。size()
方法返回向量大小的值(const),而不是引用。所以不能递增。AddInventoryHonest()
使用push_back()
将其添加到向量中。因此,size()
方法的返回值将随着对push_back
的每次调用而变化。因此,这将在这种情况下起作用。
编辑2:要处理多线程情况,请使用条件变量(只是一个示例)
int prevSize = vVector.size();
// do something
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
std::condition_variable cv;
bool size_did_not_increase() {
return vVector.size() == prevSize;
}
cv.wait(lck, size_did_not_increase());
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- C++ "error: invalid use of void expression"
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 对象声明中的模板"error: expected expression"
- 为什么我的功能在使用 goto 时会给我带来"expected primary-expression before '}' token"?
- 为什么我会"error: expected expression"?
- 叮当声:折叠表情和"expression result unused"警告
- 错误消息"expected expression"....有人知道它为什么这么说吗?
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- "expression must be a modifiable lvalue"是什么意思?
- 如何理解"Temporary objs are destroyed as the last step in evaluating the full-expression"?谁能用一些简单的例子来说明这
- "noexcept-expression 由于对......的调用而计算为'假'"是什么意思?
- unordered_set .find 方法无法编译的 C++ "expression must have class type"错误
- 如何修复此错误"expected primary expression before 'int'"?
- 使用结构和数组时的"expected primary expression before '.' token"
- 如何修复 eigen3 中的'non-type template argument is not a constant expression'?
- 编译为 cuda 内核调用提供了"expression must have integral or unscoped enum type"
- 如何解决"Expected expression before " = " token"?
- 如何"do, if expression increased"?