我在python 2.7.6 REPL中玩,并遇到了这种行为.
>>> x = -10
>>> y = -10
>>> x is y
False
>>> x, y = [-10, -10]
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)
看起来,析构化赋值为等效值返回相同的引用.为什么是这样?
如果取一个数字,取其平方根,删除小数,然后将其提高到二次幂,结果应始终小于或等于原始数.
这似乎在python中都适用,直到你99999999999999975425
出于某种原因尝试它.
import math
def check(n):
assert math.pow(math.floor(math.sqrt(n)), 2) <= n
check(99999999999999975424) # No exception.
check(99999999999999975425) # Throws AssertionError.
Run Code Online (Sandbox Code Playgroud)
它看起来像math.pow(math.floor(math.sqrt(99999999999999975425)), 2)
回报1e+20
.
我认为这与我们在python中存储值的方式有关...与浮点运算相关的东西,但我不能具体说明这会如何影响这种情况.
#[derive(Default)]
struct SomeOptions {
foo: i32,
bar: f32,
}
fn main() {
let options = SomeOptions { foo: 42, ..Default::default() };
}
Run Code Online (Sandbox Code Playgroud)
..
返回值的前缀Default::default()
是什么?为什么这里需要它?它几乎看起来像是一个传播运营商,但我不确定.我理解..Default::default()
正在做什么 - 用默认值填充剩余的struct参数SomeOptions
,但不是如何..
工作.这个运营商的名字是什么?
在我的代码库上运行cppcheck并收到以下错误:
Dangerous iterator comparison using operator< on 'std::deque'.
Run Code Online (Sandbox Code Playgroud)
但是deque的迭代器是一个随机访问迭代器,随机访问迭代器支持不等式运算符.什么给出了什么?
例:
#include <deque>
int main()
{
std::deque<int> d;
std::deque<int>::iterator di1 = d.begin();
std::deque<int>::iterator di2 = d.end();
if (di1 < di2)
{
// (error) Dangerous iterator comparison using operator< on 'std::deque'.
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:此错误已通过cppcheck ticket#5926提交并修复.
我正在阅读TLPI(Linux编程接口),他们似乎使用1024作为文件操作的标准缓冲区大小.我很奇怪为什么选择这个尺码.是否有"最佳"文件大小?
详细说明并希望得到一些进一步的见解:在哪些情况下使用512或2048字节会破坏某些东西?我假设如果1024是安全的,512也是安全的,但只是更慢,因为你必须以两倍的步数移动数据.因此,如果我的想法是正确的,缓冲区大小越大,操作越快,但这也会增加失败的可能性?