小编ks1*_*322的帖子

什么是尾部呼叫优化?

很简单,什么是尾部调用优化?更具体地说,任何人都可以显示一些可以应用的小代码片段,而不是在哪里,并解释为什么?

language-agnostic algorithm recursion tail-recursion tail-call-optimization

765
推荐指数
8
解决办法
15万
查看次数

正确的printf格式说明符为double

doubleprintf中正确的格式说明符是什么?是它%f还是它%lf?我相信它%f,但我不确定.

代码示例

#include <stdio.h>

int main()
{
   double d = 1.4;
   printf("%lf", d); // Is this wrong?
}
Run Code Online (Sandbox Code Playgroud)

c floating-point double printf format-specifiers

451
推荐指数
5
解决办法
96万
查看次数

如何和/或为什么在Git中合并比在SVN中更好?

我在一些地方听说分布式版本控制系统闪耀的主要原因之一是比SVN这样的传统工具更好地融合.这实际上是由于两个系统如何工作的固有差异,或者像Git/Mercurial 这样的特定 DVCS实现是否只有比SVN更聪明的合并算法?

svn git version-control merge mercurial

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

在sed中非贪婪(不情愿)的正则表达式匹配?

我正在尝试使用sed清理URL行以仅提取域名..

所以来自:

http://www.suepearson.co.uk/product/174/71/3816/
Run Code Online (Sandbox Code Playgroud)

我想要:

http://www.suepearson.co.uk/

(有或没有火车斜线,没关系)

我试过了:

 sed 's|\(http:\/\/.*?\/\).*|\1|'
Run Code Online (Sandbox Code Playgroud)

和(逃避非贪婪量词)

sed 's|\(http:\/\/.*\?\/\).*|\1|'
Run Code Online (Sandbox Code Playgroud)

但我似乎无法使非贪婪量词工作,所以它总是最终匹配整个字符串.

regex pcre sed greedy regex-greedy

393
推荐指数
10
解决办法
23万
查看次数

MySQL查询字符串包含

我一直试图弄清楚如何用MySQL来查询$haystack某个列中的值(字符串)是否包含某些数据(字符串$needle),如下所示:

mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
Run Code Online (Sandbox Code Playgroud)

在PHP中,函数被调用substr($haystack, $needle),所以可能:

WHERE substr(`column`, '{$needle}')=1
Run Code Online (Sandbox Code Playgroud)

php mysql sql string-comparison

276
推荐指数
7
解决办法
74万
查看次数

是否默认将C++结构的成员初始化为0?

我有这个struct:

struct Snapshot
{
    double x; 
    int y;
};
Run Code Online (Sandbox Code Playgroud)

我希望x并且y为0.默认情况下它们是0还是我必须这样做:

Snapshot s = {0,0};
Run Code Online (Sandbox Code Playgroud)

将结构归零的其他方法是什么?

c++

189
推荐指数
5
解决办法
14万
查看次数

如何在github上取消拉取请求?

如何取消github上的pull请求?

更新 接受的答案没有详细说明答案中的步骤,无论如何,github使这个问题变得简单,因为这个问题被问到了,所以这里是以下步骤:

  1. 访问拉取请求页面
  2. 点按"关闭拉取请求按钮"

git github pull-request

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

-fPIC在构建共享库时意味着什么?

我知道' -fPIC'选项与解决各个模块之间的地址和独立性有关,但我不确定它的真正含义.你可以解释吗?

c c++ gcc fpic

104
推荐指数
3
解决办法
5万
查看次数

通过'tuple'和'tie'实现比较运算符,这是一个好主意?

(注意:tuple并且tie可以从Boost或C++ 11中获取.)
当编写只包含两个元素的小结构时,我有时倾向于选择a std::pair,因为所有重要的东西都已经为该数据类型完成,例如operator<严格弱序.
但缺点是几乎没用的变量名.即使我自己创造了这个typedef,我也不会记得2天后究竟是什么first,second究竟是什么,特别是如果它们都属于同一类型.这对两个以上的成员来说更糟糕,因为嵌套pair非常糟糕.
另一种选择是tuple,无论是来自Boost还是C++ 11,但它看起来并没有更好,更清晰.所以我回去自己编写结构,包括任何需要的比较运算符.
特别是因为这operator<可能非常繁琐,我想通过依赖为tuple以下定义的操作来绕过这整个混乱:

示例operator<,例如严格弱排序:

bool operator<(MyStruct const& lhs, MyStruct const& rhs){
  return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
         std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
Run Code Online (Sandbox Code Playgroud)

(从传递的参数中引用tie一个引用.) tupleT&


编辑:从@DeadMG到私有继承的建议tuple并不是很糟糕,但它有一些缺点:

  • 如果运营商是独立的(可能是朋友),我需要公开继承
  • 通过铸造,我的功能/操作员(operator=特别是)可以轻松绕过
  • 有了这个tie解决方案,如果他们对订购无关紧要,我可以省略某些成员

我需要考虑这个实现有什么缺点吗?

c++ tuples operators c++11 strict-weak-ordering

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

假定具有未定义行为的分支是否无法访问并优化为死代码?

请考虑以下声明:

*((char*)NULL) = 0; //undefined behavior
Run Code Online (Sandbox Code Playgroud)

它明确地调用未定义的行为.在给定的程序中是否存在这样的语句意味着整个程序是未定义的,或者一旦控制流命中这个语句,该行为只会变得不确定?

如果用户从未输入数字,3是否可以明确定义以下程序?

while (true) {
 int num = ReadNumberFromConsole();
 if (num == 3)
  *((char*)NULL) = 0; //undefined behavior
}
Run Code Online (Sandbox Code Playgroud)

或者,无论用户输入什么,它都是完全未定义的行为?

此外,编译器是否可以假定在运行时永远不会执行未定义的行为?这样可以及时推理:

int num = ReadNumberFromConsole();

if (num == 3) {
 PrintToConsole(num);
 *((char*)NULL) = 0; //undefined behavior
}
Run Code Online (Sandbox Code Playgroud)

在这里,编译器可以推断,以防num == 3我们总是调用未定义的行为.因此,这种情况必须是不可能的,并且不需要打印该号码.整个if声明可以优化.根据标准,是否允许这种向后推理?

c++ dead-code undefined-behavior language-lawyer unreachable-code

88
推荐指数
3
解决办法
3338
查看次数