小编cxf*_*f54的帖子

前/后增量的左值和右值

学习左值和右值.定义是任何可以是"地址"的是左值,否则,它是rvalue.

我检查了运算符优先级,前缀和后缀增量都比"地址"运算符具有更高的优先级.

对于以下两个例子,任何人都可以解释为什么第一个"&++ value1"是左值,而第二个"&value1 ++"是右值.

我对这两种情况的错误理解是:pValue1指向value1变量.无论在构建地址关联之前或之后将value1更改为8,value1变量总是占用一个内存位置,我们可以派生它的地址,对吧?

int value1=7;

int *pValue1=&++value1;

int *pValue1 = &value1++;
Run Code Online (Sandbox Code Playgroud)

c++ rvalue lvalue

7
推荐指数
1
解决办法
450
查看次数

C++ 赋值优先级

为了让事情更有意义,基本上针对以下两种情况。

我以某种方式想象它们是相似的,首先是右手边。

但是“=”只是传递值

“==”返回比较结果“true”,然后转换为1。

所以他们实际上并不相似?

int hehe = haha = 3;

int hehe = haha == 3;
Run Code Online (Sandbox Code Playgroud)

//----------------------------------------------

对于下面的代码,你能解释一下为什么 haha​​ 和 hehe 都是 3 吗?

我知道赋值是右结合的。所以 haha​​ 首先分配了 3。

但是为什么 (haha = 3) 的结果不是 1 表示操作成功了呢?相反,3 一直传播到哈哈?这两种类型的术语是什么:3 一路传播 vs 某些操作成功。

int haha;
int hehe = haha = 3;

cout << haha << hehe;
Run Code Online (Sandbox Code Playgroud)

c++ operator-precedence

7
推荐指数
1
解决办法
170
查看次数

verliog中的这个错误"无效模块项"是什么?

我已经定义了两个模块,datapath和ctrl.

然后我在同一个文件中定义另一个模块,它实例化了datapath和ctrl

module mult(input reset, input [3:0] i0,i1, output o);  
   wire [3:0] cnt, sh;
   wire load, go,ld1 
   datapath d0(i0,i1,cnt,sh,load,go,o);
   ctrl c0(reset, clk,sh,cnt,ld1,load,go);
endmodule
Run Code Online (Sandbox Code Playgroud)

但是,verilog在"datapath d0 ......"这一行抱怨"无效模块项",为什么?

verilog

3
推荐指数
1
解决办法
5854
查看次数

从函数返回指向对象的指针,而不使用new来分配指针

从线程中

我什么时候应该在C++中使用new关键字?

答案讨论了如果需要从函数返回指向对象的指针,必须使用"new"来创建指向对象的指针.

但是,我的代码工作正常.我使用本地指针而不是为新指针分配一些内存.

node* queue::dequeue(){
  if(head==0){
    cout<<"error: the queue is empty, can't dequeue.\n";
    return 0;
  }
  else if(head->next !=0){
    node *tmp=head;
    head=head->next;
    tmp->next=0;
    return tmp;
  }
  else if(head->next ==0){
    node *tmp=head;
    head=0;
    tmp->next=0;
    return tmp;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的dequeue()操作.我的tmp是一个本地指针.但我还是回来了.

感谢Mahesh

我在main()中有以下语句

node a8(8); //node constructor with the value
Run Code Online (Sandbox Code Playgroud)

因此tmp指向head指向的内容,并指向不同的节点,如a8.

由于a8在main()中有效,因此tmp在main()中也是有效的

c++ new-operator

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

向量列表初始值设定项和赋值

对于两段代码,我不明白第二段

第一:它按预期打印 0 1 2

  vector<int> ivec;
  ivec={0,1,2};
  for(auto i: ivec){
    cout<<ivec[i]<<endl;
  }
Run Code Online (Sandbox Code Playgroud)

第二:它打印 0 0 0 5。这个随机值是如何生成的?

  vector<int> ivec;
  ivec={0,1,2};
  ivec={4,5,9,1};
  for(auto i: ivec){
    cout<<ivec[i]<<endl;
  }
Run Code Online (Sandbox Code Playgroud)

c++ initialization

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

python,subprocess.call(["rm","inv.mt0"],shell = True)无效

朋友们,

我有一个简单的脚本

import subprocess

subprocess.call(["./run_xf"])

old=open('./inv.mt0','r')

lines=old.readlines()

lines=lines[3:]

new=open('./inv.mt1','w')

new.writelines(lines)

old.close()

new.close()

subprocess.call(["rm", "inv.mt0"], shell=True)
Run Code Online (Sandbox Code Playgroud)

除最后一个代码外,所有代码都有效.

run_xf运行hspice并生成inv.mt0.然后我将inv.mt0的一部分复制到inv.mt1.然后我想删除inv.mt0.但这不起作用.

对于这个具体的例子,它抱怨rm找不到操作数.但是,如果我一起写它们,它也不会删除该文件.

谢谢

XF

python subprocess

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

没有用于调用employee :: employee()的匹配函数

我正在尝试TCPL的派生类示例.

经理是一名员工,有额外的级别信息.我一直收到错误:

no matching function for call to employee::employee() 
in the constructor of manager::manager()
Run Code Online (Sandbox Code Playgroud)

所有员工都是公开的,可访问的.经理构造函数有什么问题?

#include <iostream>
#include <string>
using namespace std;


class employee{
  public:
    enum type {M,E};
    type hier;
    string id;
    employee(string idd):hier(E){id=idd;};
};

class manager: public employee{
  public:
    int level;
    manager(string idd, int lv){hier=employee::M; id=idd;level=lv;};
};

void print(employee *x){
  if(x->hier == employee::E){
    cout<<"I am employee with id "<<x->id<<endl;
}
  else{
    cout<<"I am manager with id "<<x->id<<endl;
    manager* y=static_cast<manager *>(x);
    cout<<"My level is "<<y->level<<endl;
  }
}

int main(){
  employee …
Run Code Online (Sandbox Code Playgroud)

c++ derived-class

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