小编sbi*_*sbi的帖子

为什么迭代器需要是可默认构造的

前向,双向随机访问类别的迭代器需要是默认构造的.

为什么这样,为什么输入输出运算符不必是默认可构造的?

c++ iterator stl standard-library language-lawyer

33
推荐指数
1
解决办法
2013
查看次数

如何减少当前序列化所需的样板

我们的软件抽象出硬件,我们有代表这个硬件状态的类,并且有很多数据成员用于该外部硬件的所有属性.我们需要定期更新有关该状态的其他组件,为此我们通过MQTT和其他消息传递协议发送protobuf编码的消息.有不同的消息描述硬件的不同方面,因此我们需要发送这些类的数据的不同视图.这是一个草图:

struct some_data {
  Foo foo;
  Bar bar;
  Baz baz;
  Fbr fbr;
  // ...
};
Run Code Online (Sandbox Code Playgroud)

让我们假设我们需要发送一条包含foo和的消息bar,并且一封包含barbaz.我们目前的做法是大量的锅炉板:

struct foobar {
  Foo foo;
  Bar bar;
  foobar(const Foo& foo, const Bar& bar) : foo(foo), bar(bar) {}
  bool operator==(const foobar& rhs) const {return foo == rhs.foo && bar == rhs.bar;}
  bool operator!=(const foobar& rhs) const {return !operator==(*this,rhs);}
};

struct barbaz {
  Bar bar;
  Baz baz;
  foobar(const Bar& bar, const Baz& baz) : bar(bar), baz(baz) {}
  bool …
Run Code Online (Sandbox Code Playgroud)

c++ redundancy boilerplate stdtuple

28
推荐指数
2
解决办法
927
查看次数

C++容器的一般用例

C++标准库容器的一般用例是什么?

  • 位集合
  • 双端队列
  • 名单
  • 地图
  • 多重映射
  • 多集
  • priority_queue
  • 队列
  • 向量

例如,对于配对搜索,地图通常更好.

c++ containers stl

26
推荐指数
2
解决办法
7036
查看次数

编译C++程序的阶段是什么?

是否由标准指定的C++程序的编译阶段?

如果是这样,他们是什么?

如果没有,广泛使用的编译器(我更喜欢MSVS)的答案会很棒.

我在谈论预处理,标记化,解析等.它们的执行顺序是什么,特别是它们的作用是什么?

编辑:我知道编译,链接和预处理是做什么的,我最感兴趣的是其他人和订单.当然,对这些的解释也受到欢迎,因为我可能不是唯一对答案感兴趣的人.

c++ compiler-construction compilation c++-faq

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

C++中的控制台暂停?

在C#中,您可以使控制台等待输入字符(这对于在程序退出之前能够看到控制台的最后输出非常有用).作为C++的初学者,我不确定它的等价物是什么.有吗?

c++ windows console

23
推荐指数
3
解决办法
6万
查看次数

Visual Studio中的解决方案文件与项目文件

有人可以简单地向我解释Visual Studio的解决方案文件(.sln)和项目文件(.vcproj)之间的区别.

在我看来,在Visual Studio中打开正确的解决方案/项目.是另一个的超级集吗?

注意:我目前正在使用Visual Studio 2008处理从Visual Studio 2005提出的项目(我相信).

visual-studio

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

std :: string是否需要将其字符存储在连续的内存中?

我知道在C++ 98中,既不需要std::basic_string<>也不std::vector<>需要使用连续存储.std::vector<>一旦被指出,这被视为疏忽,如果我没记错的话,用C++ 03修复.

似乎记得std::basic_string<>在C++ 11仍然被称为C++ 0x时读过有关需要使用连续存储的讨论,但我当时没有密切关注讨论,并且仍然局限于C++ 03的工作所以我不确定它是什么.

那么是否std::basic_string<>需要使用连续存储?(如果是这样,那么标准的哪个版本首先需要它?)

如果您想知道:如果您将代码传递&str[0]给期望连续写入内存的函数,则这很重要.(我知道str.data(),但由于显而易见的原因,旧代码不使用它.)

c++ language-lawyer c++11 c++14 c++17

22
推荐指数
2
解决办法
3186
查看次数

在C++中使用bool/fail将字符串转换为int

我有一个std::string可能是一个字符串或可能是一个值(如0).

转换std::stringint具有失败能力的最佳或最简单的方法是什么?我想要C#的C++版本Int32.TryParse.

c++ parsing c++-faq

20
推荐指数
4
解决办法
2万
查看次数

简单的C scanf不起作用?

如果我尝试以下内容:

int anint;
char achar;

printf("\nEnter any integer:");
scanf("%d", &anint);
printf("\nEnter any character:");
scanf("%c", &achar);
printf("\nHello\n");
printf("\nThe integer entered is %d\n", anint);
printf("\nThe char entered is %c\n", achar);
Run Code Online (Sandbox Code Playgroud)

它允许输入一个整数,然后scanf完全跳过第二个,这真的很奇怪,因为当我交换两个(charscanf优先)时,它工作正常.究竟是什么错了?

c console scanf

20
推荐指数
3
解决办法
4万
查看次数

选择任一循环作为外循环是否有优势?

我正在扩展现有的日志记录库.它是一个有两面的系统:前端是任务将日志消息写入的位置,后端是应用程序可以插入侦听器的位置,将这些消息转发到不同的接收器.后端曾经是一个硬连线的监听器,我现在正在扩展这个灵活性.该代码专门用于嵌入式设备,其中高性能(以每毫秒转发的字节数衡量)是非常重要的设计和实现目标.

出于性能原因,消息被缓冲,并且转发在后台任务中完成.该任务从队列中提取一大块消息,将它们全部格式化,然后通过已注册的函数将它们传递给侦听器.这些侦听过滤消息,并且只会将这些消息写入通过过滤条件的接收器.

鉴于此,我最终得到了N发送M消息的通知函数(侦听器),这是一个相当经典的N*M问题.现在我有两种可能性:我可以遍历消息,然后循环通过将消息传递给每个消息的通知函数.

for(m in formatted_messages) 
  for(n in notification_functions)
    n(m);

void n(message)
{
    if( filter(message) )
      write(message);
}
Run Code Online (Sandbox Code Playgroud)

或者我可以循环遍历所有通知函数,并将它们立即传递给我:

for(n in notification_functions)
    n(formatted_messages);

void n(messages)
{
  for(m in messages)
    if( filter(m) )
      write(m);
}
Run Code Online (Sandbox Code Playgroud)

关于哪种设计更有可能允许每个时间片处理更多数量的消息,是否有任何基本考虑因素?(注意这个问题如何决定听众的界面.这不是一个微优化问题,而是一个关于如何使设计不妨碍性能的问题.我只能在很长一段时间后进行测量,然后重新设计监听器接口将会很昂贵.)

我已经做了一些考虑:

  • 那些听众需要在某处写消息,这相当昂贵,因此函数调用本身在性能方面可能不太重要.
  • 在95%的情况下,只有一个听众.

c++ performance loops

19
推荐指数
2
解决办法
346
查看次数