我到处都读到,在C++中,只能从指向那块内存的指针获取动态数组的大小.
怎么可能无法从指针获取动态数组的大小,同时可以通过delete []仅使用指针释放所有分配的内存,而无需指定数组尺寸?
delete []必须知道数组的大小,对吧?因此,此信息必须存在于某处.不应该吗?
我的推理有什么问题?
我正在尝试在 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) 如何在scala中编写没有返回/中断的早期返回代码?
例如
for i in 0..10000000
if expensive_operation(i)
return i
return -1
Run Code Online (Sandbox Code Playgroud) 这可能已经被问到了。
为什么允许向非常量变量分配对常量的引用?
为什么这是允许的
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 指针”一致 - 不存在。]
',lisp 中反引号表达式的作用和用途是什么?它有名字吗?它是否记录在某处?它有多普遍和有用?
例如:
(defmacro test-exp (exp)
`(format t "~&~S => ~S~%" ',exp ,exp))
Run Code Online (Sandbox Code Playgroud)
我的猜测是exp,在宏扩展时,它将采用字面上的任何内容,并',exp用它替换。(与评估exp和替换,exp它相反)。
setuptools 是否find_packages仍然要求包__init__.py内有一个文件?
文档说
仅当包包含
__init__.py文件时才会被识别。
但我读到__init__.py不再需要文件来将目录标记为 python 包。