对于二进制搜索树类型的数据结构,我看到Big O表示法通常标记为O(logn).在日志中使用小写的"l",这是否意味着日志基数e(n)如自然对数所描述的那样?抱歉这个简单的问题,但我总是无法区分不同的隐含对数.
void Foo(float a){} //1
void Foo(double a){} //2 overloaded
Foo(1.0f); //calls function 1
Foo(1.0 /*double numeric suffix?*/); //calls function 2
Run Code Online (Sandbox Code Playgroud)
如果不是,演员是否可以实现这一目标?我主要对确保某些操作中的双精度数学等感兴趣:
ulong j;
double v;
j = /*some value*/;
if(j>0UL)
v = 1.0 / j; //if 1.0 is set as a float by the compiler then
//could it be likely we lose some precision here
//if a double would allow for more precision? Is
//a cast the only means of ensuring double precision?
Run Code Online (Sandbox Code Playgroud)
关于允许编译器在操作期间自动确定类型的其他提示将是有帮助的.
if( (A) && (B) )
{
//do something
}
else
//do something else
Run Code Online (Sandbox Code Playgroud)
问题是,如果A为FALSE,该语句是否会立即中断.B会被评估吗?
我问这个情况,当数组实际上是空的并且元素为零时,B检查数组索引的有效性就说数组[0].因此我们尝试访问超出数组范围的内容,因此抛出了一个段错误.特别
if( (array.GetElements() > 0) && (array[0]))
array[0]->doSomething();
else
//do nothing and return
Run Code Online (Sandbox Code Playgroud)
如果array [0]实际得到了评估,这可能会很危险,因为它会在没有第一次检查的情况下在"&&"的左侧进行段错误.优先级告诉我,左侧肯定会优先,但它并没有告诉我,如果左边是假,它将不会评估右侧.
ulong foo = 0;
ulong bar = 0UL;//this seems redundant and unnecessary. but I see it a lot.
Run Code Online (Sandbox Code Playgroud)
我在引用数组的第一个元素时也看到了这个数量
blah = arr[0UL];//this seems silly since I don't expect the compiler to magically
//turn '0' into a signed value
Run Code Online (Sandbox Code Playgroud)
有人可以提供一些见解,为什么我需要'UL'来明确指出这是一个无符号长?
class A
{
public:
A();
~A();
int X;
};
A::A()
{
X = 5;
int Y = 4;
}
//..... in another file
A * objectOnHeap = new A();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由于"objectOnHeap"在堆上,即使它没有特别新的,X也在堆上吗?在这种情况下,Y在堆栈上分配(当然超出范围),对吗?
我想知道在尝试设想如何将对象存储在内存中时是否已经将我的电线交叉.
我已经在我们的代码中看到了这几次,它立刻让我怀疑.但由于我不知道原来的意图,我犹豫要删除它.
//requires double indirection which I won't go into
FooClass::FooFunction(void ** param)
{
//do something
}
SomeClass * A = new SomeClass();
SomeClass **B = &A;
FooFunction( reinterpret_cast<void**>(&*B) ); // what is happening here?
Run Code Online (Sandbox Code Playgroud)
"&*B"部分是有问题的部分?随意整合重新解释演员的解释,但我对演员技巧非常熟悉.
Class A
{
public:
NullIt()
{
this = NULL;
}
Foo()
{
NullIt();
}
}
A * a = new A;
a->Foo();
assert(a); //should assert here
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这种效果,内存泄漏?