gpt4 book ai didi

C++11 实验,为什么我不能使用某些功能?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:44 31 4
gpt4 key购买 nike

我目前正在概述 C++11 的新特性,由于目前不明原因,其中一些特性无法编译。我使用 gcc version 4.6.0 20100703 (experimental) (GCC) 所以根据 GNU GCC FAQ,我尝试的所有功能都是 supported .我尝试使用 std=c++0x 和 std=gnu++0x 标志进行编译。

非成员 begin() & end()

例如,我不想在如下代码中使用非成员 begin() 和 end():

#include <iostream>
#include <map>
#include <utility>
#include <iterator>

using namespace std;
int main ( ) {
map < string, string > alias;
alias.insert ( pair < string, string > ( "ll", "ls -al" ) );
// ... Other inserts

auto it = begin(alias);
while ( it != end(alias) ) {
//...
}

我明白了,

nonMemberBeginEnd//main.cc:15:24: error: ‘begin’ was not declared in this scope
nonMemberBeginEnd//main.cc:15:24: error: unable to deduce ‘auto’ from ‘<expression error>’ // Ok, this one is normal.
nonMemberBeginEnd//main.cc:16:26: error: ‘end’ was not declared in this scope

我需要包含特殊标题吗?

对于范围

我的第二个(也是最后一个)问题比较奇怪,因为它不能依赖于我可能没有包含的黑魔法隐藏 header 。

以下代码:

for ( auto kv : alias )
cout << kv.first << " ~ " << kv.second << endl;

给我以下错误:

rangeFor/main.cc:15:17: error: expected initializer before ‘:’ token

我希望我的问题对你们来说不是离题或太新手,你们会帮我找出问题所在 :D

最佳答案

它适用于 gcc 4.6.1:

#include <iostream>
#include <map>
#include <string>

int main(int argc, char** argv) {
std::map<std::string, std::string> alias = {{"key", "value"}};
for (auto kv: alias)
std::cout << kv.first << " ~ " << kv.second << std::endl;

auto it = begin(alias);
while (it != end(alias) ) {
std::cout << (*it).first << " ~ " << (*it).second << std::endl;
it++;
}
return EXIT_SUCCESS;
}

结果:

# /opt/gcc-4.6.1/bin/g++-4.6 --std=c++0x test.cc -o test && ./test
key ~ value
key ~ value

关于C++11 实验,为什么我不能使用某些功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971368/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com