小编Mic*_*ini的帖子

获得动态C风格数组的大小与使用delete [].矛盾?

我到处都读到,在C++中,只能从指向那块内存的指针获取动态数组的大小.

怎么可能无法从指针获取动态数组的大小,同时可以通过delete []仅使用指针释放所有分配的内存,而无需指定数组尺寸?

delete []必须知道数组的大小,对吧?因此,此信息必须存在于某处.不应该吗?

我的推理有什么问题?

c++ arrays heap

36
推荐指数
3
解决办法
1437
查看次数

线程中的 C++ 方法。传递之间的区别:对象、对象的地址、对象的 std::ref

我正在尝试在 C++ 线程中执行对象的方法。

通过将方法的地址和对象(或对象的地址,或 std::ref(my_obj))传递给线程的构造函数,我能够做到这一点。

我观察到,如果我传递对象,而不是对象的地址或 std::ref(my_obj),那么对象会被复制两次(我正在复制构造函数中打印一些信息以查看)。

这是代码:

class Warrior{
    string _name;
public:
    // constructor
    Warrior(string name): _name(name) {}

    // copy constructor (prints every time the object is copied)
    Warrior(const Warrior & other): _name("Copied " + other._name){
        cout << "Copying warrior: \"" << other._name;
        cout << "\" into : \"" << _name << "\"" << endl;
    }

    void attack(int damage){
        cout << _name << " is attacking for " << damage << "!" << endl;
    }
};

int …
Run Code Online (Sandbox Code Playgroud)

c++ methods multithreading ref copy-constructor

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

如何在没有退货声明的情况下提早退货?

如何在scala中编写没有返回/中断的早期返回代码?

例如

for i in 0..10000000
  if expensive_operation(i)
     return i
return -1
Run Code Online (Sandbox Code Playgroud)

functional-programming scala return

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

关于const 引用(和const 指针)的弱语义

这可能已经被问到了。

为什么允许向非常量变量分配对常量的引用?

为什么这是允许的

int mut {0};
const int & r_to_c {mut};
mut = 1;
// now r_to_c changed to 1!
// But it was supposed to be a reference to something constant!
Run Code Online (Sandbox Code Playgroud)

?

当然,我不能改变引用到常量本身的值。我不能

r_to_c = 2;
Run Code Online (Sandbox Code Playgroud)

但是是不是const执行的资格太少了?我希望,从 const-ness 的承诺来看,不允许绑定到可变变量。

否则const给我什么保证?它们看起来很弱,而且这似乎很容易诱使程序员用脚射击自己。

我知道 C++ 以允许人们用脚射击自己而闻名。允许危险的事情发生我没有问题。在这种情况下,我的问题是,在这种情况下,它似乎是故意欺骗,因为const这里的语义不是人们所期望的。

我的问题是关于编译器和语言语义的问题,而不是特别关于引用的问题(我可以使用分配给非常量变量地址的常量指针来问同样的问题。像int mut{0}; const int * p_to_c{&mut};)。

为什么引用常量(或常量指针)的语义只是“你不能使用这个特定的窗口来修改你看到的东西(但如果你有其他非常量的窗口,你可以修改它)”而不是更强大的“这只能是声明为常量并且编译器保证它保持不变的东西的窗口”?


[术语说明:我使用表达式“const 引用”而不是“const 引用”,因为“const 引用”被解释为T& const- 与调用T* const“const 指针”一致 - 不存在。]

c++ constants const-reference

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

',(引号)在普通 lisp 中

',lisp 中反引号表达式的作用和用途是什么?它有名字吗?它是否记录在某处?它有多普遍和有用?

例如:

(defmacro test-exp (exp)
  `(format t "~&~S => ~S~%" ',exp ,exp))
Run Code Online (Sandbox Code Playgroud)

我的猜测是exp,在宏扩展时,它将采用字面上的任何内容,并',exp用它替换。(与评估exp和替换,exp它相反)。

escaping common-lisp quoting backquote

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

setuptools 的 find_packages 是否需要 __init__.py 文件或不识别包

setuptools 是否find_packages仍然要求包__init__.py内有一个文件?

文档说

仅当包包含__init__.py文件时才会被识别。

但我读到__init__.py不再需要文件来将目录标记为 python 包。

python setuptools python-packaging

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