小编Hap*_*tal的帖子

为什么预增量运算符在C中给出rvalue?

在C++中,预增量运算符给出左值,因为返回了递增的对象本身,而不是副本.但在C中,它给出了右值.为什么?

c c++ rvalue lvalue

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

makefile扩展名

我想创建一个makefile.所以我在记事本文件中写了说明.
但是在保存此文件时我应该给予什么扩展?

makefile

26
推荐指数
4
解决办法
5万
查看次数

关于可行前缀的说明

在Ullman的编译器书中,在shift reduce parsing中,给出了可行前缀的定义:

"可以出现在shift-reduce解析器堆栈上的右句子形式的前缀集称为可行前缀.可行前缀的等效定义是它是右句子形式的前缀,不会继续通过右边该句子的最右边句柄的末尾.通过这个定义,总是可以在可行前缀的末尾添加终端符号以获得正确的句子形式.因此,只要该部分可用,就显然没有错误.看到给定点的输入可以减少到可行的前缀."

我无法理解这个定义.有人可以通过一个例子解释可行前缀的含义吗?
特别是,请解释
"可行前缀的等效定义是,它是右句子形式的前缀,不会继续超过该句子最右边句柄的右端"

compiler-construction parsing

25
推荐指数
2
解决办法
2万
查看次数

静态初始化命令fiasco

我正在读一本关于SIOF的书,它举了一个例子:

//file1.cpp
extern int y;
int x=y+1;

//file2.cpp
extern int x;
int y=x+1;  
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:
在上面的代码中,会发生以下事情吗?

  1. 编译file1.cpp时,编译器保留原样,即不为它分配存储空间.
  2. 编译器为x分配存储空间,但不对其进行初始化.
  3. 编译file2.cpp时,编译器会保留x,即不为它分配存储空间.
  4. 编译器为y分配存储空间,但不对其进行初始化.
  5. 在链接file1.o和file2.o时,现在先让file2.o初始化,现在:
    x的初始值是否为0?或者没有初始化?

c++ dependencies initialization static-order-fiasco

20
推荐指数
2
解决办法
1万
查看次数

MAX-HEAPIFY的最坏情况:"最坏的情况发生在树的底层正好是半满的时候"

CLRS,第三版,第155页,给出了在MAX-HEAPIFY中,

"the worst case occurs when the bottom level of the tree is exactly half full"  
Run Code Online (Sandbox Code Playgroud)

我想原因是在这种情况下,Max-Heapify必须通过左子树"向下浮动".
但我无法得到的是"为什么半满"?
如果左子树只有一个叶子,Max-Heapify也可以向下浮动.那么为什么不把这视为最坏的情况呢?

algorithm heap clrs

15
推荐指数
2
解决办法
6917
查看次数

工会成员如何存储?

union test
{
 int i;
 char ch;
}t;
int main()
{
 t.ch=20;
}
Run Code Online (Sandbox Code Playgroud)

假设sizeof(int)==2并且让分配给t的内存地址是2000,2001.
然后在哪里20即t.ch存储 - 在2000或2001或依赖于机器的字节顺序?

c endianness unions

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

为什么main方法在java中是静态的

我听到有人说"如果main不是静态的,那么JVM可以创建一个包含main的类的对象,并通过对象调用main.
但问题是JVM如何知道在重载构造函数的情况下调用哪个构造函数,或者即使有只有一个参数化的构造函数,然后才能通过."

这是正确的理由吗?
因为如何在不进入主函数的情况下创建类的对象?
请就此发表意见.如果这不是正确的理由,那么正确的原因是什么?

java static program-entry-point

13
推荐指数
2
解决办法
4377
查看次数

二次函数的渐近紧束缚

在CLRS(Cormen,Leiserson,Rivest和Stein的算法导论)中,用于函数

˚F(Ñ)= 一个2 + BN + Ç

他们说

假设我们取常数c 1 = a/4,c 2 = 7 a/4,并且n 0 = 2·max(| b |/a,√(| c |/a)).
然后0≤ c ^ 1 ñ 22 + BN + c ^c ^ 2 Ñ 2对于所有ÑÑ 0.
因此f(n)是Θ(n 2).

但他们没有具体说明这些常数的价值是如何产生的?
我试图证明它但不能.
请告诉我这些常数是怎么来的?

algorithm asymptotic-complexity clrs

13
推荐指数
3
解决办法
4115
查看次数

Java解释器和JVM之间的区别

我听到有人说:"一个JVM必然是一个Java解释器,但Java解释不一定是JVM".真的吗?

我的意思是Java解释器和JVM之间有区别吗?

java interpreter programming-languages

12
推荐指数
2
解决办法
3万
查看次数

在c'tor初始化列表中将临时绑定到const引用

C++ 03中的第12.2.5节说" 在构造函数的ctor-initializer(12.6.2)中绑定到引用成员的临时绑定一直存在,直到构造函数退出 "
所以我尝试了以下程序

#include<iostream>
using namespace std;

struct foo
{
  foo()
  {
    cout<<"foo c'tor"<<endl;
  }
  ~foo()
  {
    cout<<"foo d'tor"<<endl;
  }
};

struct bar
{
  const foo &ref;
  bar():ref(foo()) 
  {
    cout<<"bar c'tor"<<endl;
  }

};

int main()
{
  bar obj;
}    
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

foo c'tor
foo d'tor
bar c'tor
Run Code Online (Sandbox Code Playgroud)

现在根据标准,在条形码c'tor的c'tor init-list中由foo()生成的临时性将在bar'c'tor之后被销毁,所以foo d'tor应该在之后打印,bar c'tor
但它是相反的.
请解释原因.

c++ const-reference temporaries

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