我见过default在类中的函数声明旁边使用过.它有什么作用?
class C {
C(const C&) = default;
C(C&&) = default;
C& operator=(const C&) & = default;
C& operator=(C&&) & = default;
virtual ~C() { }
};
Run Code Online (Sandbox Code Playgroud) 在其他语言中,有助于生成更好代码的一般准则总是尽可能隐藏所有内容.如果对变量是私有还是受保护存在疑问,最好与私有变量一起使用.
对Python来说也是如此吗?我应该首先在所有内容上使用两个前导下划线,并且只在我需要时将它们隐藏起来(只有一个下划线)吗?
如果惯例只使用一个下划线,我也想知道其基本原理.
这是我在JBernardo的回答中留下的评论.它解释了为什么我问这个问题,以及为什么我想知道为什么Python与其他语言不同:
我来自语言,训练你认为一切都应该只是公开的,而不是更多.原因是这将减少依赖性并使代码更安全.反向做事的Python方式 - 从公共开始到隐藏 - 对我来说很奇怪.
我已经看到了ELF哈希算法中使用的波浪号运算符,我很好奇它的作用.(代码来自Eternally Confused.)
unsigned elf_hash ( void *key, int len )
{
unsigned char *p = key;
unsigned h = 0, g;
int i;
for ( i = 0; i < len; i++ ) {
h = ( h << 4 ) + p[i];
g = h & 0xf0000000L;
if ( g != 0 )
h ^= g >> 24;
h &= ~g;
}
return h;
}
Run Code Online (Sandbox Code Playgroud) 在C++ 11中,您可以使用基于范围的语言for,它可以充当foreach其他语言.它甚至适用于普通的C数组:
int numbers[] = { 1, 2, 3, 4, 5 };
for (int& n : numbers) {
n *= 2;
}
Run Code Online (Sandbox Code Playgroud)
怎么知道什么时候停止?它是否仅适用于已在相同范围内声明的静态数组for?你会如何for在动态数组中使用它?
C++中的模板机制只是偶然地对模板元编程有用.另一方面,D's专门设计用于促进这一点.而且显然它更容易理解(或者我听说过).
我没有D的经验,但是我很好奇,你能用D做什么,而你在模板元编程方面不能用C++做什么?
如果我覆盖operator=,复制构造函数会自动使用new运算符吗?同样,如果我定义了一个拷贝构造函数,会operator=自动"继承"拷贝构造函数的行为吗?
c++ constructor operators copy-constructor assignment-operator
一个相当简单的问题......这些天的编译器倾向于进行大量的优化.它们是否也从最终输出中删除未使用的函数?
我需要一些帮助找到一个良好的启发式解决以下问题:
您将得到一个
R-by-C网格和六面的骰子.设start和end是在这个网格两种截然不同的细胞.找到一条路径start,end使得当模具沿路径转动时,模具面朝上的总和是最小的.模具的起始方向如下("2"朝南):
我模拟这个问题的方法是将模具的面值视为图形中边缘的成本.图形的顶点具有形式(row, col, die)(即,网格中的位置和模具的当前状态/方向).顶点不是简单的原因(row, col)是因为你可以使用骰子的多个配置/方向结束相同的单元格.
我用A*来找到问题的解决方案; 给出的答案是正确的,但效率不高.我已经确定问题是我正在使用的启发式问题.目前我正在使用曼哈顿距离,这显然是可以接受的.如果我将启发式乘以常量,则不再允许:它运行得更快,但并不总能找到正确的答案.
我需要一些帮助才能找到比曼哈顿距离更好的启发式方法.
在C++模板中使用尖括号进行实例化,vector<int>Java和C#语言对其泛型使用相同的语法.
然而,D的创造者对尖括号带来的问题非常直言不讳,并且他们提出了一种新的语法foo!(int)- 但我从未见过关于尖括号带来的问题的太多细节.
其中一个是用另一个模板实例化模板时vector<vector<int>>,这会导致一些(较旧的?)编译器将尾随的">>"与位移或流操作符混淆.解决方案是在两个尖括号之间插入一个空格,但现在还没有编译器能够解析这种语法吗?
另一个问题是使用大于运算符时foo<3 > 2>.解析器会认为运算符实际上关闭了模板实例化; 修复是介绍括号foo<(3 > 2)>.但我不认为有很多情况你需要这样做,无论如何,我宁愿在需要时输入额外的括号,而不是引入新的语法并且总是要输入感叹号.
使用尖括号还有哪些其他问题使D开发人员创建了新语法?
我正在寻找一个关于zlib的好教程.我只对解压缩档案感兴趣.我还想知道如何在存档中访问所需的文件,最好是单独使用文件名,如果可以在zlib中完成的话.
c++ ×8
c ×3
c++11 ×2
d ×2
operators ×2
a-star ×1
algorithm ×1
arrays ×1
constructor ×1
declaration ×1
default ×1
foreach ×1
heuristics ×1
keyword ×1
path-finding ×1
python ×1
syntax ×1
templates ×1
zlib ×1