小编Ano*_*non的帖子

使用指针和使用静态对象的Singleton实现之间的区别

编辑:对不起,我的问题不明确,为什么书籍/文章更喜欢实施#1而不是实施#2?

使用指针实现Singleton类与使用静态对象的实际优势是什么?为什么大多数书都喜欢这个

class Singleton
{
  private:

    static Singleton *p_inst;
    Singleton();

  public:

    static Singleton * instance()
    {
      if (!p_inst)
      {
        p_inst = new Singleton();
      }

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

在此

class Singleton
{
  public:
    static Singleton& Instance()
    {
        static Singleton inst;
        return inst;
    }

  protected:
    Singleton(); // Prevent construction
    Singleton(const Singleton&); // Prevent construction by copying
    Singleton& operator=(const Singleton&); // Prevent assignment
    ~Singleton(); // Prevent unwanted destruction
};
Run Code Online (Sandbox Code Playgroud)

c++ singleton design-patterns

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

C和C++中静态变量初始化的区别

我正在浏览http://geeksforgeeks.org/?p=10302上的代码

#include<stdio.h>
int initializer(void)
{
    return 50;
}

int main()
{
    static int i = initializer();
    printf(" value of i = %d", i);
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码不会在C中编译,因为静态变量需要在main()启动之前初始化.那样就好.但是这段代码在C++编译器中编译得很好.

我的问题是,当静态在两种语言中具有相同的用法时,为什么它在C++编译器中编译.当然编译器对于这些语言会有所不同,但我无法确定原因.如果在标准中指定,我很想知道.

我在SO上搜索了这个问题,找到了3个类似的链接但是徒劳无功. Link1 Link2 Link3

谢谢你的帮助.

c c++ static

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

int和signed int声明之间的区别

我正在阅读有关嵌入式编程的一些教程,其中一个说int并且signed int不同但不解释如何或为什么.

我明白了为什么unsigned intint是不同的,但intsigned int被不同的是,对我来说是新的.

c int standards types declaration

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

在unix中快速查找文件中的字符串的方法

我想在unix中找到文件中的字符串模式.我用下面的命令:

$grep 2005057488 filename
Run Code Online (Sandbox Code Playgroud)

但文件包含数百万行,我有很多这样的文件.除了grep之外,获取模式的最快方法是什么.

unix

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

虚拟表的说明

可能重复:
了解vtable条目

使用g ++版本4.6.3,64位机器.我知道编译器可以随心所欲地实现虚函数.我想知道这里发生了什么.

我的课:

#include <iostream>
class test
{
    public:
    virtual void func(){std::cout<<"in class test";}
};

int main()
{
    test obj;
    obj.func();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

查看编译器生成的虚拟表,

Vtable for test
test::_ZTV4test: 3u entries
0     (int (*)(...))0 (<---- what is this? )
8     (int (*)(...))(& _ZTI4test)
16    (int (*)(...))test::func
Run Code Online (Sandbox Code Playgroud)

在偏移8处,它是RTTI

在偏移16处,它是虚函数的入口.

我的问题是为什么在偏移0处有空的条目,或者换句话说第一次进入的目的是什么?

PS我认为这可能与对齐有关,但后来我添加了更多的虚函数,但RTTI条目仍然是偏移8.

c++ gcc g++ vtable

9
推荐指数
1
解决办法
2346
查看次数

任何人都可以解释这个C程序的输出吗?

可能重复:
为什么不能在switch语句中声明变量?
绕过定义时如何使用变量?

#include<stdio.h>
  int main()
  {
      int a=1;
      switch(a)
      {   int b=20;
          case 1: printf("b is %d\n",b);
                  break;
          default:printf("%d\n",b);
                  break;
      }
      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

在gcc 4.6.3上运行,输出不是20.这里发生了什么?

c switch-statement

7
推荐指数
3
解决办法
603
查看次数

如何迭代/计算多图<string,string>

我的班级是这样的:

class Outgoing
{
    multimap<string,string> outgoing;

    public:
    void makeConnection(string key, string value)
    {
        outgoing.insert(pair<string,string>(key,value));
    }

    void iterate()
    {
        multimap<string, string>::iterator it;
        multimap<string, string>::iterator it2;
        pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret;
        for (it = outgoing.begin();it != outgoing.end();++it)
        {
            ret = outgoing.equal_range((*it));  ??????
            for (it2=ret.first; it2!=ret.second; ++it2)
            {
                ???????

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

背景:

我想表示一个可以有很多节点的图表.密钥不会重复,但可以有多个值.

str1  ----> val1
str1  ----> val2
str2 -----> val3
Run Code Online (Sandbox Code Playgroud)

我想知道如何获取特定键的值的数量?例如在上面的问题中,对于str1,它将是2?

正如你所看到的,我试图做一些事情,经过一些挖掘,但徒劳无功.

我的代码出了什么问题?

谢谢

编辑:::在templatetypedef的评论之后,我将代码编辑为:

for (it = outgoing.begin();it != outgoing.end();++it)
{
    cout<< (*it).first << " "<<  outgoing.count((*it).first); 

}
Run Code Online (Sandbox Code Playgroud)

我可以得到计数,但键("str1")来了两次.所以我看到的答案是2 2 1. …

c++ stl map multimap

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

在内核空间中捕获数据包的缓冲区大小?

通过这里的tcpdump的手册页 如果缓冲区已满,内核似乎可以丢弃数据包.我想知道是否

1)该大小是可配置的和/或2)我在哪里可以看到我的发行版的大小?

从手册页(以便于参考):

数据包``由内核丢弃''(这是由于缺少缓冲区空间而丢弃的数据包数量,由运行tcpdump的操作系统中的数据包捕获机制,如果操作系统向应用程序报告该信息;如果没有,它将被报告为0).

unix linux networking network-programming linux-kernel

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

如果未找到密钥,则返回空字符串向量

我知道这是一个非常糟糕的主意,所以有关如何有效地做到这一点的其他建议将会受到好评.

这就是事情.我有map<string,vector<string> >,我想搜索一个键并返回其相应的值(在这种情况下字符串的向量).我坚持返回(而不是仅仅迭代)的原因是我需要搜索其他向量中返回的值.

一个例子可以说明这一点:

Input:

key1 ---> {2,3,4}
key2 ---> {1}
key3 ---> {2,12,11,9}
Run Code Online (Sandbox Code Playgroud)

对于key1作为输入,应返回值为2,3,4的向量.现在需要在其他字符串向量中搜索这些2,3,4值.最有效的方法是什么?

我试过这样的事情:

vector<string> returnEdges(string key)
{
    for (map<string, vector<string> >::iterator it=outgoing.begin();
    it!=outgoing.end();++it)
    {
        if (key.compare((*it).first)==0)
        {
            return (*it).second;
        }
    }


    //return string<;//what should I return here????


}
Run Code Online (Sandbox Code Playgroud)

1)如果找不到密钥,我应该如何返回空向量?

2)实现这个的最佳方法是什么?

我希望这个问题很清楚.

编辑:当我写这个问题时,我想为什么不返回迭代器?SO的人是否批准了这个想法?

c++ stl vector return-value stdvector

5
推荐指数
1
解决办法
8644
查看次数

如果UDP不可靠,为什么在传输层使用它

对不起,这是一个愚蠢的问题.

传输层的功能是可靠的消息传递.UDP本质上是不可靠的,为什么我们在传输层使用它呢?

谢谢

编辑:只是为了澄清,我已经阅读了Wiki和其他来源.我的问题是

UDP是不可靠的(我知道为什么以及它的优点和使用位置等),为什么不在其他层使用它(UDP),而不是意味着可靠性的传输层.

networking udp osi tcp-ip

4
推荐指数
1
解决办法
9383
查看次数