小编use*_*846的帖子

在std :: move()之后unique_ptr会发生什么?

这段代码是我想要做的:

Tony& Movie::addTony()
{
    Tony *newTony = new Tony;
    std::unique_ptr<Tony> tony(newTony);
    attachActor(std::move(tony));
    return *newTony;
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以这样做:

Tony& Movie::addTony()
{
    std::unique_ptr<Tony> tony(new Tony);
    attachActor(std::move(tony));
    return *tony.get();
}
Run Code Online (Sandbox Code Playgroud)

但是会*tony.get()是同一个指针还是null?我知道我可以验证,但它的标准是什么?

c++ unique-ptr

28
推荐指数
2
解决办法
3万
查看次数

为什么我不应该在头文件中初始化静态变量?

所以,假设我有一个这样的标题:

#ifndef BASECLASS_H
#define BASECLASS_H

class BaseClass
{
    public:
        static int getX(){return x;}
    private:
        static int x;
};

int BaseClass::x = 10;

#endif
Run Code Online (Sandbox Code Playgroud)

我多次听说过我不应该在头文件中初始化静态变量,而是在cpp中.但是因为有守卫,所以应该只有一个BaseClass :: x副本.所以我有点不明白为什么要放

int BaseClass::x = 10; 
Run Code Online (Sandbox Code Playgroud)

在cpp.谢谢.

c++

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

在构造函数中初始化 const char * - 会出现内存泄漏吗?

这是我得到的代码:

struct ChoiceLine
{
    const char *prompt;
    ChoiceLine(const char *pr):
        prompt(pr)   //can this cause a memory leak?
    {
        ;
    }
};
Run Code Online (Sandbox Code Playgroud)

...

ChoiceLine choiceLine("hello world");
Run Code Online (Sandbox Code Playgroud)

那么可以const char*用另一个初始化 aconst char*吗?

PS:我知道std::string,不幸的是不符合我的目的。

c++

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

两个线程可以同时使用相同的嵌入式python解释器吗?

标题有它,但这里有一些阐述.假设主线程产生另一个线程,其中一些代码被加载到python解释器中,然后调用另一个线程,该线程通过相同的python接口(通过PyImport或PyRun)执行更多代码.这种情况是否可行?

c++ python multithreading interpreter python-c-api

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

GetAsyncKeyState(0x57) 工作正常,但不是 GetAsyncKeyState('w')

所以,是的,0x41 是 'w',但这是为什么呢

GetAsyncKeyState(0x57)
Run Code Online (Sandbox Code Playgroud)

工作和这个

GetAsyncKeyState('w')
Run Code Online (Sandbox Code Playgroud)

不管用?通过“不工作”,我的意思是当我按“w”时,它根本没有像 0x57 那样做出反应。我该如何解决?我想要做的是从文件中读取一个字符,比如“w”,然后在 GetAsyncKeyState() 函数中使用它。提前致谢!

c++

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

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

setSizePolicy() 和 QSizePolicy.Expanding 不起作用:子级不会扩展到父级的大小

根据http://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum,设置小部件的大小策略具有以下效果:

sizeHint() 是一个合理的大小,但是小部件可以缩小但仍然有用。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如水平滑块的水平方向)。

因此,我希望下面的黄色小部件能够填充绿色小部件,但这并没有发生。我做错了什么?

在此输入图像描述

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Yellow(QWidget):

    def __init__(self, *args):
        super().__init__(*args)

        # Set palette
        bg = QPalette()
        bg.setColor(QPalette.Window, Qt.yellow)
        self.setAutoFillBackground(True)
        self.setPalette(bg)

        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

class Green(QWidget):

    def __init__(self, *args):
        super().__init__(*args)

        # Set palette
        bg = QPalette()
        bg.setColor(QPalette.Window, Qt.green)
        self.setAutoFillBackground(True)
        self.setPalette(bg)

        self.yellow = Yellow(self)

class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5'
        self.left = 10
        self.top = 10
        self.width = 200
        self.height = 200 
        self.initUI() …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt pyqt5

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

使用std :: map和std :: list :: iterator

为什么这段代码不能编译?

#include <map>
#include <list>

int main()
{
    typedef std::list<int>::iterator Iter;

    std::map<Iter, Iter> m;

    std::list<int> ints;

    m[ints.begin()] = ints.begin();
}
Run Code Online (Sandbox Code Playgroud)

如果我改变std::liststd::vector,一切正常.

错误日志如下:

|| "==== Building Practical (release) ===="
|| main.cpp
In file included from C:\mingw32\i686-w64-mingw32\include\c++\bits\stl_tree.h|65| 0,
||                  from C:/mingw32/i686-w64-mingw32/include/c++/map:60,
||                  from ../src/main.cpp:1:
|| C:/mingw32/i686-w64-mingw32/include/c++/bits/stl_function.h: In instantiation of 'bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = std::_List_iterator<int>]':
C:\mingw32\i686-w64-mingw32\include\c++\bits\stl_map.h|498 col 32| required from 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = …
Run Code Online (Sandbox Code Playgroud)

c++ iterator compiler-errors std standard-library

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

计算列表中每个元素的所有出现次数

如何有效地计算列表中每个元素的所有出现次数?我曾想过使用关联列表或一些哈希图,但是不可变性会妨碍人们的发展,而且还不清楚如何产生(希望)优雅的解决方案。

签名可能是这样的:

countOccurences :: [a] -> [(a, Int)]
Run Code Online (Sandbox Code Playgroud)

例:

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

结果是

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

(顺序并不重要)。

haskell count counting

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

尖锐引用 lambda 时的非法函数调用

如果这两个表达式等价

CL-USER> (lambda (x) (+ x 10))
#<FUNCTION (LAMBDA (X)) {530321CB}>

CL-USER> #'(lambda (x) (+ x 10))
#<FUNCTION (LAMBDA (X)) {5303226B}>
Run Code Online (Sandbox Code Playgroud)

那为什么我会在这里收到非法函数调用错误

CL-USER> (#'(lambda (x) (+ x 10)) 10)
Run Code Online (Sandbox Code Playgroud)

而这

CL-USER> ((lambda (x) (+ x 10)) 10)
20 (5 bits, #x14, #o24, #b10100)
Run Code Online (Sandbox Code Playgroud)

效果很好吗?

PS我正在使用SBCL。

lisp lambda common-lisp

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