小编bad*_*ash的帖子

运算符重载:成员函数与非成员函数?

我读到一个声明为成员函数的重载运算符是非对称的,因为它只能有一个参数而另一个自动传递的参数是this指针.所以没有比较它们的标准.另一方面,声明为a的重载运算符friend对称的,因为我们传递两个相同类型的参数,因此可以对它们进行比较.

我的问题是,当我仍然可以将指针的左值与参考值进行比较时,为什么会选择朋友?(使用非对称版本提供与对称相同的结果)为什么STL算法仅使用对称版本?

c++ operator-overloading member-functions friend-function non-member-functions

107
推荐指数
2
解决办法
9万
查看次数

什么是构造函数继承?

在C++ 11中,继承构造函数意味着什么?如果它是我认为的(基类构造函数被带入派生类的范围),它对我的​​代码有什么影响?这样的功能有哪些应用?

c++ inheritance constructor c++11

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

在同一个类python中调用私有函数

如何从同一个类中的其他函数调用私有函数?

class Foo:
  def __bar(arg):
    #do something
  def baz(self, arg):
    #want to call __bar
Run Code Online (Sandbox Code Playgroud)

现在,当我这样做时:

__bar(val)
Run Code Online (Sandbox Code Playgroud)

从baz(),我得到这个:

NameError: global name '_Foo__createCodeBehind' is not defined
Run Code Online (Sandbox Code Playgroud)

有人能告诉我错误的原因是什么吗?另外,我如何从另一个私人函数调用私有函数?

python private function call

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

什么时候静态变量在C#中初始化?

我想知道静态变量(在一个类中)何时进入图像(初始化)?它是在第一次调用实例构造函数之后还是在类加载之后?什么时候加载类?

c# static

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

REST的无国籍原则实际上意味着什么?

在阅读了关于REST的介绍性文章(Fielding的论文和其他)后,我对无状态的看法是服务器端不应该有会话对象.然而,我看到Flask(以及我不知道的不同技术中的其他REST框架)为我们提供了一个会话对象,用于在此示例中在服务器上存储信息:

@app.route('/login', methods=['GET', 'POST'])
def login():
  if request.method == 'POST':
    session['username'] = request.form['username']
    return redirect(url_for('index'))
...
Run Code Online (Sandbox Code Playgroud)

当然,我误解了REST的无国籍状态.那么,它真的是什么?

python rest stateless flask

20
推荐指数
1
解决办法
7229
查看次数

使用运算符new/malloc分配的内存块是否可以在程序执行结束后持续存在?

可能重复:
退出C应用程序时,是否自动释放了malloc-ed内存?

当我读到关于在C/C++中动态内存分配时分别使用delete/free是多么强制时,我才想到这个问题.我想如果内存分配持续超出我的程序执行终止,那么是的,它是强制性的; 否则,为什么我要担心释放分配的空间?操作系统是否会在进程终止时自动释放它?我是对的吗?我的问题是可以的

int *ip = new int(8);
Run Code Online (Sandbox Code Playgroud)

坚持超越我的计划终止?

c c++ dynamic-memory-allocation

14
推荐指数
4
解决办法
2139
查看次数

默认模板参数:为什么编译器会抱怨没有指定模板参数?

我有这个代码:

struct A{};

template<class T = A>
struct B {
    void foo() {}
};

B b; //Error: missing template arguments before 'b'
     //Error: expected ';' before 'b'
     //More errors
b.foo()
Run Code Online (Sandbox Code Playgroud)

如果我foo()使用相同的模板'signature'作为模板函数,编译器不会抱怨没有指定模板参数:

struct A {};

struct B {
    template<class T = A>
    void foo() {}
};

B b; //OK
b.foo()
Run Code Online (Sandbox Code Playgroud)

那么为什么我需要为带有默认参数的模板类指定参数,而不是为模板函数指定?我遗失了一些微妙之处吗?

原因是因为模板参数推断失败肯定.但我想知道原因.

c++ templates default-parameters template-argument-deduction

8
推荐指数
1
解决办法
2336
查看次数

使用foldr实现take

这是我的take版本使用foldr:

myTake n list = foldr step [] list
                where step x y | (length y) < n = x : y
                               | otherwise = y

main = do print $ myTake 2 [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

输出不是我所期望的:

[3,4]
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过插入y自身的长度进行调试,结果是:

[3,2,1,0]
Run Code Online (Sandbox Code Playgroud)

我不明白为什么长度按降序插入.也许我错过了一些明显的事

haskell fold take

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

您将如何实现函数式编程语言?

在功能范例中,函数是主要的"控制结构".例如,+操作符也被视为一个函数,你可以像任何其他"对象"一样传递它们.我想知道如果我必须实现一个玩具功能语言,我会将简单的函数实现为真正的函数(即转换+为可调用的例程)或将它们转换为普通指令,这些指令将被"内联"放入已翻译的代码中.但是,通过第二种策略,我是否可以将它们传递给部分像Haskell一样应用它们?您对将功能实现/翻译为功能语言的核心理念有何看法?

implementation haskell functional-programming

7
推荐指数
1
解决办法
1131
查看次数

非类型函数模板参数

我正在阅读C++模板完整指南,并遇到了这个非类型函数模板参数代码(我添加了main()和除函数定义和调用之外的其他部分):

#include <vector>
#include <algorithm>
#include <iostream>

template <typename T, int value>
T add (T const & element){
  return element + value;
}

int main() {
  int a[] = {1,2,3,4};
  int length = sizeof (a) / sizeof (*a);
  int b[length];
  std::transform (a, a + length, b, (int(*)(int const &))add <int, 5>); //why?
  std::for_each (b, b + length, [](int const & value){ std::cout << value << '\n'; });
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

从书中读到为什么我们需要对函数调用进行类型转换后我才明白?

编辑:书中的解释:

add是一个函数模板,函数模板被认为是一组重载函数(即使集合只有一个成员).但是,根据当前标准,多组重载函数不能用于模板参数推导.因此,您必须转换为函数模板参数的确切类型:...

编译器:Ubuntu 10.10上的g ++ 4.5.1

c++ function-templates

6
推荐指数
1
解决办法
2546
查看次数