for each 和 for_each 有啥区别?
Posted
技术标签:
【中文标题】for each 和 for_each 有啥区别?【英文标题】:What is the difference between for each and for_each?for each 和 for_each 有什么区别? 【发布时间】:2019-09-17 05:06:31 【问题描述】:我接手了一个旧代码,需要使用 JNI 调用。在代码中看到for each( in )
的用法,但是这段代码在Linux下无法编译。
好想知道for each
是怎么生成的,可以使用哪些平台,Linux下编译的时候有没有?
我正在尝试理解for each
的语法,但是这个信息几乎是不可能找到的,但是有很多for_each
的用法。
在windows平台上我只用Visual Studio 2013 (v120)
编译成功,v14之后的版本异常。
在Linux平台下,我使用如下命令编译,报错很多。结果如下:
g++ -I/usr/java/jdk1.8.0_191/include/ -I/usr/java/jdk1.8.0_191/include/linux/ -fPIC -shared -o ErmjJNI.so *.cpp -pthread -std=c++11
ErmjAI.cpp: In member function ‘virtual void ErmjAI::initGame(size_t, size_t, const std::vector<std::vector<int> >&, std::string, std::string)’:
ErmjAI.cpp:74:8: error: expected ‘(’ before ‘each’
for each (size_t tile in tiles[i])
^
ErmjAI.cpp:74:21: error: expected primary-expression before ‘tile’
for each (size_t tile in tiles[i])
^
ErmjAI.cpp:74:37: error: ‘each’ was not declared in this scope
for each (size_t tile in tiles[i])
^
ErmjAI.cpp:75:4: error: expected ‘;’ before ‘’ token
^
ErmjAI.cpp:3346:1: error: expected primary-expression at end of input
我在这个(http://www.cplusplus.com/search.do?q=for+each)网站上查询了相关的API,但是没有任何收获。
这样的代码太多了,我已经失去耐心了,下面列出几个例子。
for each (size_t tile in tiles[i])
if (tile<=33)
tNum[tile]++;
_unseen_tiles_num[tile]--;
else
m_vecHua[i].push_back(tile);
很想知道如何在Linux下编译for each
语法。
想知道for each
的历史和使用平台。
我想更多地了解我应该如何理解这一点,而不是像现在这样问问题。
【问题讨论】:
使用#define each
和#define in :
,您可能会运行它,但我担心它可能会破坏其他代码。 ;-)
一一替换,#define很危险
【参考方案1】:
for each, in
是 Microsoft 编译器中的非标准语法,即使他们也不推荐使用。我建议您更改代码以使用 C++11 ranged-based for 循环。这将得到标准的编译器的支持。
for (size_t tile : tiles[i])
// your code
【讨论】:
【参考方案2】:for each (size_t tile in tiles[i])
看起来不像C++,改成:
for (size_t tile : tiles[i])
您还可以read 如何在 C++ 中使用基于范围的方法。
【讨论】:
以上是关于for each 和 for_each 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 因 for_each 参数无效/给定的“for_each”参数值不合适而失败
使用 for_each 创建的资源中带有 for_each 的动态块
std::for_each 和 std::vector 析构函数调用