小编Han*_*lil的帖子

stl中的一些容器没有查找功能

一些STL容器例如std::liststd::vector没有find()方法作为成员函数.这是为什么?我知道有使用的替代std::find<algorithm>,但仍然使用这也不是100%纯天然.

c++ containers stl

24
推荐指数
3
解决办法
1899
查看次数

关键字typeof in c ++ 11

我知道:

  • typeof 是一个gcc扩展,不是C++标准的一部分.

问题:

  1. 这个词是否typeof在C++ 11中被弃用了?换句话说,在使用C++ 11时,是否允许它仍然用作gcc扩展名?
  2. 它是正确的说,每次更换typeofdecltype产量的代码相同的行为?
  3. 假设我有template<typename T> class wrapper.申报的最佳方式是什么wrapper_some_field,它相当于:Wrapper<typeof(some_field)> wrapper_some_field

c++ typeof c++11

7
推荐指数
2
解决办法
1万
查看次数

返回函数类型的前向声明

正如这个答案所暗示的那样,我知道允许在函数声明中使用不完整类型作为返回值.所以我写了下面的代码:

Obj.h

class Obj {
    int x;
};
Run Code Online (Sandbox Code Playgroud)

FH

class Obj;
Obj f();
Run Code Online (Sandbox Code Playgroud)

f.cpp

#include "Obj.h"

Obj f() {
    return Obj();
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "f.h"
int main() {
    f();
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

使用以下编译器编译此代码:

g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)

使用以下编译命令:

g++ *.cpp
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

main.cpp: In function 'int main()':
main.cpp:4:7: error: invalid use of incomplete type 'class Obj'
     f();
       ^
f.h:1:7: error: forward declaration of 'class Obj'
 class Obj;
       ^
Run Code Online (Sandbox Code Playgroud)

因此编译器不允许在函数声明中使用不完整类型作为返回值.解释是什么?

c++ forward-declaration

6
推荐指数
2
解决办法
2296
查看次数

重新定义范围内的变量

为什么以下代码在g ++下编译时没有任何警告或错误?我看到的问题是第一行中定义的变量x可以在if范围内访问,但尽管它再次被重新定义.

int main() {
    int x = 5;
    std::cout << x;
    if (true) {
        int x = 6;
        std::cout << x;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors g++

3
推荐指数
2
解决办法
1295
查看次数

避免原始循环并改用 std::algorithm

我正在尝试遵循此处给出的建议,以避免原始循环并std::algorithm改为使用。因此,如果您能在以下情况下帮助我做到这一点,我将不胜感激:

std::stringstream ss;
std::vector<Object> v;
for (const auto& curr : v) { ss << curr.ToString() << '\n'}
return ss.str()
Run Code Online (Sandbox Code Playgroud)

c++ stl-algorithm c++11

3
推荐指数
2
解决办法
3624
查看次数

C++中的std :: back_insert_iterator 17

如前所述, std::back_insert_iterator在C++之前,17继承自std::iteratorC++ 17.这种变化的原因是什么?

c++ iterator stl c++17

3
推荐指数
1
解决办法
179
查看次数

C++中的抽象迭代器类

在编写AVL树类之后,我想为树编写3种迭代器:preOrder,inOrder,postOrder.我认为一种非常合理的方法是通过抽象类迭代器来实现,因此3个迭代器类就是从它中获得的.但是当我想编写postfix ++运算符的声明时出现问题.我想在一些选项中:1.iterator&operator ++(int)问题:postfix迭代器无法返回引用对象.2.迭代器运算符++(int)问题:类迭代器是抽象的,因此不能按值返回.

那么这样做的正确方法是什么?谢谢

c++ iterator abstract

0
推荐指数
1
解决办法
369
查看次数

是否有类似 AutoCloseable 的类不会抛出异常

是否有任何主要的 Java 库提供AutoCloseable类似的接口,其 close 方法不会抛出异常?我的关闭实现非常简单,我想避免捕获异常的样板

java autocloseable

0
推荐指数
1
解决办法
104
查看次数