小编P0W*_*P0W的帖子

为什么vector <bool>不是STL容器?

Scott Meyers的书第18项有效STL:50改进您对标准模板库的使用的具体方法说避免vector <bool>因为它不是STL容器而且它实际上并不存在bool.

以下代码:

vector <bool> v; 
bool *pb =&v[0];
Run Code Online (Sandbox Code Playgroud)

不会编译,违反STL容器的要求.

错误:

cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
Run Code Online (Sandbox Code Playgroud)

bool返回类型应该是T&,但为什么它是特殊情况vector<T>::operator []

什么是T&真正组成的呢?

该项目进一步说:

deque<bool> v; // is a STL container and it really contains bools
Run Code Online (Sandbox Code Playgroud)

这可以用作替代品vector<bool>吗?

有人可以解释一下吗?

c++ containers stl vector bitvector

85
推荐指数
5
解决办法
4万
查看次数

C++中的Lambda-Over-Lambda 14

以下递归lambda调用如何结束/终止?

#include <cstdio>

auto terminal = [](auto term)            // <---------+  
{                                        //           |
    return [=] (auto func)               //           |  ???
    {                                    //           |
        return terminal(func(term));     // >---------+
    };
};


auto main() -> int
{
    auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; };
    auto world =[](auto s){ fprintf(s,"World\n"); return s; };


    terminal(stdout)
            (hello)
            (world) ;

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Running code

c++ lambda c++14

69
推荐指数
5
解决办法
4215
查看次数

为什么"bool c = nullptr;" 编译(C++ 11)?

我不明白为什么下面的代码编译

int main()
{
     //int a = nullptr;  // Doesn't Compile
     //char b = nullptr; // Doesn't Compile
       bool c = nullptr; // Compiles

       return 0;
}
Run Code Online (Sandbox Code Playgroud)

而评论部分没有.


我已经经历了这个这个.

这两个boolnullptr是关键字,那么什么是关于其他数据类型的独特之处?

c++ pointers null-pointer c++11

27
推荐指数
3
解决办法
5209
查看次数

K&R中的C函数声明

我不熟悉K&R风格的功能声明.

编译之后,带有警告(仅与main的返回值相关-Wall)但是使用的变量的数据类型是什么?

main(a, b, c, d){
    printf("%d", d);
}

foo(a, b){
     a = 2; 
     b = 'z';
}
Run Code Online (Sandbox Code Playgroud)

如果这是一个问题,请在评论部分提供链接.我找不到类似的东西.

编辑

我刚刚遇到了一个混淆的C代码,它使用了这些代码.
但我可以向你保证,我不会在C编程中使用这样的语法.

c

11
推荐指数
2
解决办法
3875
查看次数

什么是分配器以及何时需要使用它们?

在阅读有关C++和标准库的书籍时,我看到频繁引用分配器.

例如,Nicolai Josuttis的C++标准库在最后一章中详细讨论了它们,并且第2项("了解分配器的约定和限制")和11("理解自定义分配器的合法用途")在Scott Meyers的有效的STL是关于它们的使用.

我的问题是,分配器如何代表一个特殊的内存模型?默认的STL内存管理不够吗?何时应该使用分配器?

如果可能,请使用简单的内存模型示例进行说明.

c++ stl allocator

10
推荐指数
1
解决办法
924
查看次数

使用字符串文字初始化vector <char>

以下代码的正确行为是什么?

#include <vector>
#include <iostream>

int main() 
{
  std::vector<char> v = { "y", "z" };  
  std::cout << v[0];

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是被接受Clang但不是GCCVC++

这不是一个未定义的行为吗?

c++ c++11

10
推荐指数
1
解决办法
4555
查看次数

删除变量时C++奇怪的编译错误

以下代码不编译 g ++ 4.8.1

struct Layers
{
    typedef struct Widgets { } Widgets;

    virtual void fun(void) 
    {
        struct Widgets w;
    }

    Widgets w, x, y, z ;
};
Run Code Online (Sandbox Code Playgroud)

但是,如果我只是使用Widgets w, x, y ; //Remove variable z编译!

为什么会这样?我在这里错过了什么?

c++

9
推荐指数
2
解决办法
488
查看次数

2d数组vs数组结构

我是C语言的新手,所以我的问题可能达不到高标准

我们可以使用吗

struct mat{

  int a[10];

};m[10];
Run Code Online (Sandbox Code Playgroud)

代替

int mat[10][10];
Run Code Online (Sandbox Code Playgroud)

有什么不同?哪个更有效率?

c

8
推荐指数
1
解决办法
693
查看次数

C++ 11编译器生成的函数

说一堂课

class Piece {} ;

如果我是对的,应该相当于:

class Piece {
   //C++ 03
    Piece ();                          //default constructor
    Piece( const Piece&);              //copy constructor
    Piece& operator=(const Piece&);    //copy assignment operator
    ~Piece();                          //destructor

    //Since C++ 11
    Piece(Piece&&);                   //move constructor
    Piece& operator=(Piece&&);        //move assignment operator
};
Run Code Online (Sandbox Code Playgroud)

那么我能说些什么呢?

一个)

class Pawn{
    ~Pawn() {}// Only destructor
};
Run Code Online (Sandbox Code Playgroud)

b)

class Bishop{
    Bishop(Bishop&& ) {}// Only move constructor
};
Run Code Online (Sandbox Code Playgroud)

C)

class Knight{
    Knight(Knight&&, int =0) {} // move constructor, when no second arg present
};
Run Code Online (Sandbox Code Playgroud)

d)

class Rook {
    Rook(const …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

8
推荐指数
1
解决办法
5052
查看次数

递归函数中的返回类型推导

以下代码编译:

auto foo(int i) {
  if( i == 1 )
    return i;
  else 
    return foo(i-1)+i ; 
}
Run Code Online (Sandbox Code Playgroud)

虽然以下没有,但c ++ 1y

auto foo(int i) {
  return (i == 1) ? i : foo(i-1)+i ;  
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器不能在第二种情况下推断出返回类型?我在这里错过了一些东西吗?

我知道(i == 1)在第二种情况下有一个序列点,但这不应该影响编译,对吧?

c++ c++14

8
推荐指数
2
解决办法
508
查看次数

标签 统计

c++ ×8

c++11 ×3

c ×2

c++14 ×2

stl ×2

allocator ×1

bitvector ×1

containers ×1

lambda ×1

null-pointer ×1

pointers ×1

vector ×1