小编Ang*_*ber的帖子

引用成员变量作为类成员

在我的工作地点,我看到这种风格被广泛使用: -

#include <iostream>

using namespace std;

class A
{
public:
   A(int& thing) : m_thing(thing) {}
   void printit() { cout << m_thing << endl; }

protected:
   const int& m_thing; //usually would be more complex object
};


int main(int argc, char* argv[])
{
   int myint = 5;
   A myA(myint);
   myA.printit();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有名称来形容这个成语?我假设它是为了防止复制大型复杂对象的可能大量开销?

这通常是好的做法吗?这种方法有什么缺陷吗?

c++ reference

58
推荐指数
3
解决办法
7万
查看次数

如何转发声明名称空间中的类

我试图在头文件中使用前向声明来减少使用的#includes,从而减少用户包含我的头文件的依赖关系.

但是,我无法转发使用命名空间的decalre.见下面的例子.

a.hpp file:
#ifndef __A_HPP__
#define __A_HPP__

namespace ns1 {

   class a {
   public:
      a(const char* const msg);

      void talk() const;

   private:
      const char* const msg_;
   };
}

#endif //__A_HPP__

a.cpp file:
#include <iostream>

#include "a.hpp"

using namespace ns1;

a::a(const char* const msg) : msg_(msg) {}

void a::talk() const { 
   std::cout << msg_ << std::endl; 
}



consumer.hpp file:
#ifndef __CONSUMER_HPP__
#define __CONSUMER_HPP__

// How can I forward declare a class which uses a namespace
//doing this below results in …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces

38
推荐指数
2
解决办法
4万
查看次数

为什么条件运算符是正确关联的?

我可以理解为什么赋值运算符是正确关联的.什么时候才有意义

x = 4 + 3
Run Code Online (Sandbox Code Playgroud)

评估,在分配给x之前添加4和3.

我不清楚如何?:从正确的联想中获益.只有两个?:人像这样使用才有意义

z = (a == b ? a : b ? c : d);
Run Code Online (Sandbox Code Playgroud)

然后它被评估如下:

z = (a == b ? a : (b ? c : d));
Run Code Online (Sandbox Code Playgroud)

从左到右进行评估肯定会更有意义吗?

c conditional-operator

35
推荐指数
3
解决办法
1万
查看次数

当函数没有返回值时,返回类型应该是什么?

在过去,你可能有这样的功能:

const char* find_response(const char* const id) const;
Run Code Online (Sandbox Code Playgroud)

如果找不到该项,则可以返回null以指示该事实,否则显然返回相关的字符串.

但是当函数改为:

const std::string& find_response(const std::string& id) const;
Run Code Online (Sandbox Code Playgroud)

您返回什么表示未找到项目?

或者签名真的应该是:

bool find_response(const std::string& id, std::string& value) const;
Run Code Online (Sandbox Code Playgroud)

什么是最优雅的现代C++方式?

c++

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

部分 - 为什么我需要在这里使用反引号?

我想了解部分,并认为我已经得到它.基本上,它是将部分应用程序应用于二元运算符的一种方法.所以,我理解所有的(2*),(+1)等等的例子就好了.

但是在O'Reilly Real World Haskell的书中,章节'部分':)它有这个例子:

(`elem` ['a'..'z']) 'f'
>True
Run Code Online (Sandbox Code Playgroud)

我理解括号的必要性 - 即节语法.但为什么我需要反引号呢?

如果我尝试,我得到:

(elem ['a'..'z']) 'f'

<interactive>:220:19:
    Couldn't match expected type `[[Char]]' with actual type `Char'
    In the second argument of `elem', namely 'f'
    In the expression: (elem ['a' .. 'z']) 'f'
    In an equation for `it': it = (elem ['a' .. 'z']) 'f'
Run Code Online (Sandbox Code Playgroud)

haskell

14
推荐指数
1
解决办法
4082
查看次数

将生成器对象转换为字典

这是我的代码:

# library to extract cookies in a http message
cj = cookielib.CookieJar()

... do connect to httpserver etc

cdict = ((c.name,c.value) for c in cj)
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是cdict是一个生成器.但我想简单地创建一本字典.如何更改要分配给字典的最后一行?

python

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

awk - 检查字段是否可以转换为整数

只有打印字段才能转换为整数

如果我有这个示例文本文件

1 cat
2 dog
3 7
4 fish5
5 22
Run Code Online (Sandbox Code Playgroud)

我希望我的awk脚本只打印字段,如果它可以转换为整数.

我不希望打印第1,2和4行.

示例awk脚本

BEGIN {
   print "testing conversion to integer on " ARGV[1];
   myinteger = 0;  # my atmept to force this var to an integer
}
 myinteger = $2;
 myinteger != 0 { print $2; }
Run Code Online (Sandbox Code Playgroud)

这不起作用.

我怎样才能让它发挥作用?

awk

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

这个求和算法的复杂性是多少?

#include <stdio.h>

int main() {
    int N = 8;  /* for example */
    int sum = 0;
    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= i*i; j++)
            sum++;

    printf("Sum = %d\n", sum);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于每个n值(i变量),j值将为n ^ 2.所以复杂性将是n.n ^ 2 = n ^ 3.那是对的吗?

如果问题变成:

#include <stdio.h>

int main() {
    int N = 8;  /* for example */
    int sum = 0;
    for (int i = 1; i <= N; i++)
        for …
Run Code Online (Sandbox Code Playgroud)

c algorithm

10
推荐指数
1
解决办法
2449
查看次数

Javascript/web浏览器线程模型

如果我运行了javascript代码,例如在计时器上执行某些操作,并且此代码嵌入在Web浏览器的选项卡1和选项卡2中的网页中,那么客户端代码可以同时运行吗?或者javascript客户端代码是否总是只在一个浏览器线程中运行?

或者,如果有一个包含父框架和子框架的框架集,那么javascript代码可以在这种情况下同时运行吗?

是否有标准的指定型号或是否依赖于浏览器?

我的主要目标环境是IE9,所以有兴趣知道那里发生了什么.

编辑我不是在寻找线程支持或如何在JavaScript中进行线程化.我个人认为没有必要.它也使生活变得更加复杂.我只是想知道我是否需要担心它,如果是这样的话,在哪些浏览器上.

javascript multithreading

9
推荐指数
1
解决办法
2009
查看次数

这段代码如何从任何基数阶乘法中找到尾随零的数量?

下面的代码完美无缺,但我希望有人向我解释它背后的数学.基本上,它是如何工作的?

#include <stdio.h> 
#include <stdlib.h>  /* atoi */

#define min(x, y) (((x) < (y)) ? (x) : (y))

int main(int argc, char* argv[])
{
   const int base = 16;
   int n,i,j,p,c,noz,k;

   n = 7;  /* 7! = decimal 5040 or 0x13B0  - 1 trailing zero */  
   noz = n;
   j = base;
   /* Why do we start from 2 */
   for (i=2; i <= base; i++)
   {
      if (j % i == 0)
      {   
         p = 0;  /* What is …
Run Code Online (Sandbox Code Playgroud)

c algorithm math number-theory

9
推荐指数
1
解决办法
2691
查看次数