gpt4 book ai didi

c++ - 这样的初始化列表在 C++11 中合法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:41 25 4
gpt4 key购买 nike

我阅读了 C++ 入门第 5 版,其中介绍了最新的标准支持列表初始化程序。

我的测试代码是这样的:

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::ispunct;
int main(int argc, char *argv[])
{
vector<int> a1 = {0,1,2};
vector<int> a2{0,1,2}; // should be equal to a1
return 0;
}

然后我使用 Clang 4.0:

bash-3.2$ c++ --version
Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

然后像这样编译它:

c++ -std=c++11 -Wall    playground.cc   -o playground

但是,它会这样提示:

playground.cc:13:17: error: no matching constructor for initialization of
'vector<int>'
vector<int> a1 = {0,1,2};
^ ~~~~~~~

/usr/include/c++/4.2.1/bits/stl_vector.h:255:9: note: candidate constructor
[with _InputIterator = int] not viable: no known conversion from 'int'
to 'const allocator_type' (aka 'const std::allocator<int>') for 3rd
argument;
vector(_InputIterator __first, _InputIterator __last,
^
/usr/include/c++/4.2.1/bits/stl_vector.h:213:7: note: candidate constructor
not viable: no known conversion from 'int' to 'const allocator_type'
(aka 'const std::allocator<int>') for 3rd argument;
vector(size_type __n, const value_type& __value = value_type(),

我检查了 C++ support status of Clang ,看起来它应该已经支持 Clang 3.1 中的 Initializer 列表。但是为什么我的代码不起作用。有人对此有想法吗?

最佳答案

代码是合法的,问题出在你的编译器+标准库设置上。

Apple 的 Xcode 附带了 GNU C++ 标准库 libstdc++ 的古老版本 4.2.1(有关详细信息,请参阅 https://stackoverflow.com/a/14150421/981959)并且该版本比 C++11 早很多年,因此其 std::vector 没有初始化列表构造函数。

要使用 C++11 功能,您需要安装和使用更新的 libstdc++,或者告诉 clang 使用 Apple 自己的 libc++ 库,您可以使用 -stdlib=libc++ 选项。

关于c++ - 这样的初始化列表在 C++11 中合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790354/

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