小编Mux*_*oid的帖子

是否使用增量(operator ++)浮动坏样式?

在浮点数上使用递增运算符(++)是否被视为"坏样式"?它编译得很好,但我发现它很臭,反直觉.

问题:在什么情况下使用++浮点变量合理且优于+= 1.0f?如果没有用例,是否有一个值得尊敬的C++风格指南明确表示浮在上面的++是邪恶的?

对于float ++,不会增加最小的可能值,而是增加1.0.1.0f没有特殊含义(与整数1不同).它可能使读者感到困惑,导致他认为变量是int.

对于float,不保证operator ++更改参数.例如,以下循环不是无限的:

float i, j;
for (i=0.0, j=1.0; i!=j;i=j++);
Run Code Online (Sandbox Code Playgroud)

因此,在紧接着之后执行++并不能保证该值不变.

c++ floating-point coding-style

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

重载运算符new和异常正确性

在查看遗留代码时,我发现了类似于以下代码的内容

void* legacy_type::operator new(size_t size) {
    return pool_alloc(size);
}
Run Code Online (Sandbox Code Playgroud)

众所周知,pool_alloc在发生故障时永不抛出并返回0.

这里的std :: nothrow变体没有重载.

我想知道这段代码是否在语义上是正确的,并且具有良好定义的行为.

应该new (std::nothrow) legacy_type;使用自定义pool_alloc吗?在我的编译器中它根本不编译.这是明确定义的行为吗?

如果构造函数因为this==0重载operator new返回零而运行和崩溃吗?在我的编译器中它运行(并在成员初始化时崩溃).它是标准定义良好的行为吗?

c++ exception

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

Perl - 用正则表达式上的任意操作替换正则表达式匹配

我的Perl脚本中有以下行:

s/\b(\w+)\b/ $replaces{$1} ? $replaces{$1} : $1 /g;
Run Code Online (Sandbox Code Playgroud)

我想找到字符串中的所有单词,如果单词在已知单词的数组中,则替换它,否则保留它(理想情况下我想在匹配上执行任意操作,而不仅仅是三元运算符).

为此,我尝试使用三元运算符.Perl对待?和:作为文字符号,只使用变量(如果已定义)将它们连接起来.

如何让Perl处理?:在replace中作为三元运算符?

PS:我知道我可以在下一行代码中对匹配执行操作,但为了清晰起见,我想保留一个衬里.

regex perl

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

C++抽象工厂应该为构造对象提供破坏方法吗?

考虑以下接口(使用哑指针,因为我们仍然在C++ 98中)

class WidgetMaker {
    virtual Widget* makeWidget() = 0;
};
Run Code Online (Sandbox Code Playgroud)

具有以下可能的实现

class SpecificWidgetMaker: public WidgetMaker {
    Widget* makeWidget() {
        return new SpecificWidget();
    }
};
Run Code Online (Sandbox Code Playgroud)

Widget是一些带有虚析构函数的基类,SpecificWidget扩展了它.我的同事们声称WidgetMaker界面应该包含以下方法

virtual void freeWidget(Widget* widget);
Run Code Online (Sandbox Code Playgroud)

理由是这样我们不会强制makeWidget实现使用标准的新分配,它们可以使用自定义池分配器,或者总是返回相同的全局实例,以防小部件无状态或其他.

我觉得这样的设计通常是一个坏主意 - 它使客户端代码变得复杂,违反了KISS和YAGNI,在未来20年内将转换(在我们的组织中不太可能)转换为unique_ptr更难.我应该相信自己的感受吗?当自由方法作为抽象工厂接口的一部分被证明是合理的时候是什么情况?

c++ oop c++98 creation-pattern

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

如何从Perl发出HTTP GET请求?

我正在尝试编写我的第一个Perl程序.如果您认为Perl对于手头的任务来说是一种糟糕的语言,请告诉我哪种语言可以更好地解决它.

该程序测试给定机器和远程Apache服务器之间的连接.首先,程序从Apache服务器请求目录列表,而不是解析列表并逐个下载所有文件.如果文件出现问题(连接在达到指定的Content-Length之前重置),则应记录此信息并检索下一个文件.无需保存文件甚至检查完整性,我只需要记录完成所需的时间以及连接重置的所有情况.

要从Apache生成的目录索引中检索链接列表,我计划使用类似的regexp

/href=\"([^\"]+)\"/
Run Code Online (Sandbox Code Playgroud)

实际上,regexp尚未调试.

从Perl执行HTTP请求的"参考"方式是什么?我用Google搜索并找到了使用许多不同库的示例,其中一些是商业化的.我需要能够检测到断开连接(超时或TCP重置)并处理这些内容的东西.

另一个问题.当使用最少的编码工作全局搜索字符串列表时,如何存储我的正则表达式捕获的所有内容?

perl http

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

SMTP:\ r \n\r \n(没有秒\n)作为双换行符

我有SMTP解析器,大多数工作正常.从第三方软件接收流量时出现问题,该软件将双换行发送为"\ r \n\r"(没有第二个"\n").目前,此类连接将作为不兼容的SMTP终止.有人可以解释一下RFC对这种"有趣"双重换行的确切说法吗?我能否认为发送这样的数据的软件做错了什么?

smtp newline rfc

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