关于以下代码是否是合法的C++ ,这个问题一直存在争议:
std::list<item*>::iterator i = items.begin();
while (i != items.end())
{
bool isActive = (*i)->update();
if (!isActive)
{
items.erase(i++); // *** Is this undefined behavior? ***
}
else
{
other_code_involving(*i);
++i;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是erase()将使有问题的迭代器无效.如果在i++评估之前发生这种情况,那么这样的增量i在技术上是未定义的行为,即使它似乎与特定的编译器一起使用.辩论的一方面说,在调用函数之前,所有函数参数都已完全评估.另一方说,"唯一的保证是i ++将在下一个语句之前和使用i ++之后发生.无论是在擦除(i ++)之前还是之后都依赖于编译器."
我打开这个问题,希望能够解决这个问题.
我在前面的回答中读到异常处理在Python中很便宜所以我们不应该进行预条件检查.
我以前没有听说过这个,但我对Python比较陌生.异常处理意味着动态调用和静态返回,而if语句是静态调用,静态返回.
如何做好检查是坏的,try-except好的,似乎是另一种方式.谁可以给我解释一下这个?
假设我必须为餐馆的餐点建模.
一顿饭可以包含几个"组件":
另一餐可以包括:
进一步的膳食可以包括:
只是炸薯条
只是一种饮料
只是......
我该如何建模呢?(UML,实体关系,代码,......无论你能解释得最好)
如果你知道我想要执行的一些任务,也许会有所帮助,所以:
我已经考虑将所有组件分成文章,然后添加某种角色映射来标记"薯条"作为"芝士汉堡","炸肉排","......"的补充,但后来我想知道,我怎么能模拟多个添加-ons,可选附加组件,n-out-of-m附加组件......
我希望你能帮帮我...
我用动态语言(javascript,python,haskell等)编写了很多代码,但我现在正在为研究生院学习C,我不知道我在做什么.
最初我使用makefile在一个目录中构建我的所有源代码,该代码运行得相当好.但是,我的项目正在增长,我想将源分成多个目录(单元测试,工具,核心等).例如,我的目录树可能如下所示:
.
|-- src
| |-- foo.c
| |-- foo.h
| `-- main.c
`-- test
`-- test_foo.c
Run Code Online (Sandbox Code Playgroud)
test/test_foo.c使用src/foo.c和src/foo.h.使用makefile,构建它的最佳/标准方法是什么?优选地,将存在用于构建项目的一个规则和用于构建测试的规则.
我知道还有其他方法可以做到这一点,包括autoconf和其他自动解决方案.但是,我想了解发生了什么,并且能够从头开始编写makefile,尽管它可能不切实际.
任何指导或提示将不胜感激.谢谢!
所以到目前为止给出的三个解决方案如下:
include目录中#include如#include "../src/foo.h"-I开关通知编译器包含位置到目前为止,我喜欢-I交换机解决方案,因为它不涉及在目录结构更改时更改源代码.
我有一个看起来像这样的课程.
class A
{
public:
void doSomething();
}
Run Code Online (Sandbox Code Playgroud)
我有这些类的数组.我想在数组中的每个项目上调用doSomething().使用算法标题最简单的方法是什么?
我想更好地使用NUnit来测试我编写的应用程序,但我经常发现我编写的单元测试有一个直接链接到开发机器上的环境或底层数据库.
让我举个例子.
我正在编写一个单独负责重写字符串的类,该字符串已由另一个应用程序存储在注册表中.密钥存储在HKCU\Software\CustomApplication\IniPath中.
我最终写的测试看起来像这样;
[Test]
public void GetIniDir()
{
RegistryReader r = new RegistryReader();
Assert.AreEqual(@"C:\Programfiles\CustomApplication\SomeDir", r.IniDir);
}
Run Code Online (Sandbox Code Playgroud)
但问题是字符串@"C:\ Programfiles\CustomApplication\SomeDir"现在真的是正确的.明天它可能已经改为@"C:\ Anotherdir\SomeDir",突然间,即使代码没有改变,也会破坏我的单元测试.
当我创建一个对数据库执行CRUD操作的类时,也会出现此问题.数据库中的数据可以随时更改,这反过来会使测试失败.因此,即使我的类完成了预期的操作,它也会失败,因为数据库会返回我最初编写测试时所拥有的更多客户.
[Test]
public void GetAllCustomersCount()
{
DAL d = new DAL();
Assert.AreEqual(249, d.GetCustomerCount());
}
Run Code Online (Sandbox Code Playgroud)
你们有没有关于编写不依赖周围环境的测试的技巧?
没有标准的方法来检查MySQL用户是否存在并且基于该用户丢弃它.这有什么变通方法吗?
编辑:我需要一个直接的方式来运行它而不会抛出错误,
例如
DROP USER test@localhost; :
Run Code Online (Sandbox Code Playgroud) 由于突然断电,PostGres在我的本地计算机上运行的服务器突然关闭.重新启动后,我尝试重新启动postgres,我收到此错误:
$ pg_ctl -D /usr/local/pgsql/data restart
pg_ctl: PID file "/usr/local/pgsql/data/postmaster.pid" does not exist
Is server running?
starting server anyway
server starting
$:/usr/local/pgsql/data$ LOG: database system shutdown was interrupted at 2009-02-28 21:06:16
LOG: checkpoint record is at 2/8FD6F8D0
LOG: redo record is at 2/8FD6F8D0; undo record is at 0/0; shutdown FALSE
LOG: next transaction ID: 0/1888104; next OID: 1711752
LOG: next MultiXactId: 2; next MultiXactOffset: 3
LOG: database system was not properly shut down; automatic recovery in progress
LOG: …Run Code Online (Sandbox Code Playgroud) 这是一个快速而毫无疑问的简单问题.我是PHP的新手,正在浏览一些现有的代码.我试图在谷歌上找到我的问题的答案,但无济于事.
有人可以让我知道参数$ var之前的'&'符号是什么?
function setdefault(&$var, $default="")
{
if (! isset($var))
{
$var = $default;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在积极主动地试图阻止由此产生的任何潜在问题.情况是我们正在为客户开发一个ASP.NET应用程序,它将处理客户的在线订购.这个应用程序将使用他们当前的WinForms应用程序使用的相同数据库(这里没有真正的问题).
与此同时,我们正在使用DotNetNuke为他们开发一个新的前端网站.DotNetNuke应用程序将简单地链接到ASP.NET应用程序,以便客户提交订单(无需他们来回通信等)
计划是在客户端位置的同一个盒子上托管两个应用程序.我正在寻找的是潜在的问题或设置提示,可以防止两个应用程序之间可能发生冲突(web.config冲突等)是否存在同一位置托管,如何设置IIS等问题,等等.?
如果还有任何可用的外部资源可以解决这个问题,请随时链接它们.
c++ ×2
asp.net ×1
c ×1
c# ×1
database ×1
deployment ×1
dotnetnuke ×1
function ×1
header-files ×1
makefile ×1
model ×1
modeling ×1
mysql ×1
nunit ×1
oop ×1
parameters ×1
performance ×1
php ×1
postgresql ×1
python ×1
recovery ×1
standards ×1
stl ×1
unit-testing ×1