就个人而言,我从未理解工厂类的想法,因为直接实例化一个Object似乎更有用.我的问题很简单,在什么情况下使用工厂类模式是最佳选择,出于什么原因,以及良好的工厂类是什么样的?
我在Ubuntu 14.04 LTS上使用g ++ 4.8.4.当尝试使用'-std = c ++ 14'进行编译时,我收到此错误:
g++: error unrecognized command line option '-std=c++14'
Run Code Online (Sandbox Code Playgroud)
使用'-std = c ++ 11'编译工作正常,所以我不确定发生了什么.g ++真的不支持c ++ 14吗?我使用错误的命令行选项吗?
我使用"sudo apt-get install g ++"应该会自动检索最新版本,这是正确的吗?
我知道现在每个人都使用IDE,但我发现在notepad ++中编写代码更简单,使用命令提示符命令编译它,并从那里运行它.至少适用于Java和Python.我试图了解如何使用C++做到这一点,并且无法找到任何好的东西.是否有任何编译器(如Java的JDK),我可以坚持到我的路径并使用C++等效的javac
并java
运行和编译我的CMD代码?
注意:请不要发布关于IDE如何更好的答案和评论 - 我知道它们是.我以前习惯这样做:D
extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr)
__THROW;
Run Code Online (Sandbox Code Playgroud)
我在Linux机器上的/usr/include/netinet/ether.h中找到了上面的函数定义.
有人可以在const(关键字),addr(标识符)和最后__THROW前面解释双下划线的含义.
在C++ 11中std::sqrt
定义为constexpr
,即它可以合法地从其他constexpr
函数或编译时上下文中使用,如数组大小或模板参数吗?g ++似乎允许它(使用-std=c++0x
),但我不确定我是否可以将其视为权威,因为c ++ 0x/c ++ 11支持仍然不完整.我似乎无法在互联网上找到任何东西的事实让我不确定.
看起来这应该是人们可以轻易找到使用谷歌的东西,但我已经尝试过(现在40分钟......)并且找不到任何东西.我可以找到几个建议,将constexpr添加到标准库的各个部分(例如这个),但没有关于sqrt
或其他数学函数.
如果我有一个没有指定其可访问性级别的方法,它默认是私有的吗?
void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
以上方法是私有的吗?
我在 JavaScript 中使用正则表达式验证日期,但是当我运行 SonarQube 进行代码分析时。它将正则表达式显示为一个安全漏洞。
示例1:
以下是正则表达式模式(链接到正则表达式来源/sf/answers/1085341421/):
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
Run Code Online (Sandbox Code Playgroud)
示例2:
对于浮动值,我使用了下面的正则表达式
^\d{1,5}(?:\.\d{1,5})?$
Run Code Online (Sandbox Code Playgroud)
SonarQube 抛出相同的安全错误,我尝试了各种不同的正则表达式模式,但它不起作用。
我在周日下午摆弄着,正试图创造一种"房间"结构.基本上,一个Room
对象有许多出口,每个出口都指向其他Room
的出口.现在,我要创建的第一件事是两个Room
相互连接,最好是在一个赋值语句中.像这样:
case class Room(title: String, exits: Map[Direction.Direction, Room])
val firstRoom = Room("A room", Map(North -> Room("Another room", Map(South -> firstRoom))))
Run Code Online (Sandbox Code Playgroud)
Ergo:第一个房间有一个出口North
到第二个房间,第二个房间有一个出口South
回到第一个房间.
但是,正如您可以想象的那样,这是错误的:firstRoom
在创建val时未定义val,因此在分配期间尝试引用它将不起作用.
对于大多数(如果不是全部)编程语言,我很确定这是正确的.我的问题:如何在不使我的Room
对象变为可变的情况下解决这个问题?我可以简单地创建一些Room
对象并在之后添加出口,但这使得Room
s 变得可变,并且作为个人练习我试图避免这种情况.
我需要在不同的机器和编译器上生成相同的(伪)随机数序列.如果我使用相同的内核,似乎g ++中的mersenne twister(MT)的实现效果很好:无论我是在新机器上编译我的程序,使用g ++ 4.9或4.7,我都得到相同的随机数.但是如果我使用较旧的内核或者我改用Visual Studio的编译器,我会得到不同的.没关系,因为没有保证可以mersenne_twister_engine::seed
将内部状态设置为不同的编译器.
我认为应用于operator<<
发生器会产生一个独特的结果,可以用来设置其他机器上的发生器operator>>
,但是如果mt19937
它似乎不起作用.为了说清楚,在计算机上AI有代码
mt19937 generator1A;
uniform_int_distribution<int> distribution(0, 1000);
cout << "Generating random numbers with seed 1000" << endl;
generator1A.seed(1000);
generator1A(); //to advance the state by one so operator>> will give a longer output; this is not necessary indeed
ofstream test("testseed1000.txt");
test << generator1A << endl;
for (int i = 0; i < 10; ++i)
cout << distribution(generator1A) << endl;
Run Code Online (Sandbox Code Playgroud)
它产生252,590,893,......和一个长文件.我将文件传输到另一台机器B,并运行以下代码:
mt19937 generator1B, generator2B;
uniform_int_distribution<int> distribution(0, 1000); …
Run Code Online (Sandbox Code Playgroud)