编辑:对不起,我的问题不明确,为什么书籍/文章更喜欢实施#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) 我正在浏览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
谢谢你的帮助.
我正在阅读有关嵌入式编程的一些教程,其中一个说int并且signed int不同但不解释如何或为什么.
我明白了为什么unsigned int和int是不同的,但int和signed int被不同的是,对我来说是新的.
我想在unix中找到文件中的字符串模式.我用下面的命令:
$grep 2005057488 filename
Run Code Online (Sandbox Code Playgroud)
但文件包含数百万行,我有很多这样的文件.除了grep之外,获取模式的最快方法是什么.
可能重复:
了解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.
#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.这里发生了什么?
我的班级是这样的:
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. …
通过这里的tcpdump的手册页 如果缓冲区已满,内核似乎可以丢弃数据包.我想知道是否
1)该大小是可配置的和/或2)我在哪里可以看到我的发行版的大小?
从手册页(以便于参考):
数据包``由内核丢弃''(这是由于缺少缓冲区空间而丢弃的数据包数量,由运行tcpdump的操作系统中的数据包捕获机制,如果操作系统向应用程序报告该信息;如果没有,它将被报告为0).
我知道这是一个非常糟糕的主意,所以有关如何有效地做到这一点的其他建议将会受到好评.
这就是事情.我有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的人是否批准了这个想法?
对不起,这是一个愚蠢的问题.
传输层的功能是可靠的消息传递.UDP本质上是不可靠的,为什么我们在传输层使用它呢?
谢谢
编辑:只是为了澄清,我已经阅读了Wiki和其他来源.我的问题是
UDP是不可靠的(我知道为什么以及它的优点和使用位置等),为什么不在其他层使用它(UDP),而不是意味着可靠性的传输层.