C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.
本FAQ分为五个部分:
如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.
在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用new和delete如下所示是非常危险的,但这是另一个常见问题解答的主题.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我一直在使用autoC++ 11标准中提供的新关键字来处理复杂模板类型,这是我认为它的设计目标.但我也用它来做:
auto foo = std::make_shared<Foo>();
Run Code Online (Sandbox Code Playgroud)
更加怀疑的是:
auto foo = bla(); // where bla() return a shared_ptr<Foo>
Run Code Online (Sandbox Code Playgroud)
我没有看到很多关于这个话题的讨论.似乎auto可能过度使用,因为类型通常是文档和健全性检查的一种形式.您在哪里绘制使用线auto以及此新功能的推荐用例是什么?
澄清:我不是要求哲学观点; 我要求标准委员会对该关键字的预期用途,可能还有关于如何在实践中实现该预期用途的评论.
旁注:此问题已移至SE.Programmers,然后返回Stack Overflow.关于这一点的讨论可以在这个元问题中找到.
我string::find在C++中搜索子字符串.当我定义一个字符串使用const auto并在以后使用该变量时,eclipse替换.为->.
我发现这个SO 线程的结论auto foo = "bar"是推断出来的(const char *) foo = "bar".所以eclipse正确转换.为->即使我开始时有点困惑.我假设错了auto会成为std::string.
会不会有一个缺点推导auto foo = "bar"来std::string代替const char *?代码大小增加,性能下降?