如何使用-Wall -02和-std = c ++ 0x进行编译

时间:2014-05-19 13:18:15

标签: c++ g++

我想用 - Wall -O2-std=c++0x进行编译。当我在没有-Wall -02的情况下进行编译时,我有:typeof was undeclared in this scopeit was undeclared in this scope。当我编译我的代码而没有需要-std=c++0x的部分代码时,一切都还可以,但我想要这部分。怎么了?

需要- Wall -O2的代码:

for(typeof(g[node].begin()) it = g[node].begin(); it != g[node].end(); ++it) 

需要-std=c++0x的代码:

auto biggest = std::max_element(std::begin(koszty), std::end(koszty));

avg = accumulate(czasy.begin(), czasy.end(), 0) / czasy.size();

2 个答案:

答案 0 :(得分:2)

没有名为typeof的此类运算符或关键字或标准函数。您似乎正在尝试使用C ++ 11 decltype构造。

更好的方法是使用auto

来使用C ++ 11类型推导
for(auto it = g[node].begin(); it != g[node].end(); ++it) 

或者可能是range-based for loop

for (auto& val : g[node]) { ... }

就像评论所说,你想要使用的选项不是不相容的,如果需要或想要的话,可以使用它们。

答案 1 :(得分:0)

ISO C ++中没有提到标识符typeof。这是a GNU extension for C and C++ 。它与-Wall(控制警告的选项)或-O2(控制优化的选项)无关。如果确实需要,您应该使用-std=gnu++0x代替-std=c++0x来启用GNU方言。

但是,似乎没必要。由于您使用的是C ++ 0x(现在是C ++ 11),因此关键字decltypetypeof的正确替代品。但在这里,为了清晰起见,我建议使用auto