小编Bin*_*eee的帖子

为什么条件运算符是正确关联的?

我可以理解为什么赋值运算符是正确关联的.什么时候才有意义

x = 4 + 3
Run Code Online (Sandbox Code Playgroud)

评估,在分配给x之前添加4和3.

我不清楚如何?:从正确的联想中获益.只有两个?:人像这样使用才有意义

z = (a == b ? a : b ? c : d);
Run Code Online (Sandbox Code Playgroud)

然后它被评估如下:

z = (a == b ? a : (b ? c : d));
Run Code Online (Sandbox Code Playgroud)

从左到右进行评估肯定会更有意义吗?

c conditional-operator

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

C和C++中前缀增量运算符之间的差异

我刚刚阅读了关于前缀增量运算符C引用,并意识到前缀增量运算符的结果不是左值,但令人惊讶的是它在C++中是左值.之后我读了这个答案,解释了为什么它是一个左值,但我不明白它:

(第3行):["]看起来它是这样你可以取其地址或分配给参考.[."]

以下是一个例子:

int i;
extern void f (int* p);

f (&++i);   /* Would be illegal C, but C programmers
              havent missed this feature */
...
Run Code Online (Sandbox Code Playgroud)

那么允许这个有什么好处呢?i在全球范围内增加的唯一目的是非法的吗?如果这是我认为这可以解决C中缺陷(无法/难以解决)的唯一原因,或者为了可读性而应该重写程序,对吧?

顺便说一句我不明白为什么左值也被称为"定位器值",我读过这个 - 第4行,但定位器对我来说很模糊.什么是定位器,它是指针吗?

编辑:为了您宝贵的时间阅读关于wth是定位器值,这是我自制的backronym:

  • 左值:位置值,你知道它的位置.
  • rvalue:读取值,您只能读取该值.

如果出了什么问题,不要怪我.

c c++

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

C++中值类别定义中"身份"的含义是什么?

简而言之,您可以回答有关身份的部分,谢谢.我对这个问题的主要关注点是从2开始.关于身份,我只是试图提供我当前理解的背景/背景,这样可以帮助你在写答案时决定深度.


我想了解C++中类型系统和值类别的大图.我在网上搜索/阅读了很多问题和资源,但是每个人都有一个明确的解释,所以我真的很困惑.我会列出我无法掌握的部分,如果有人能提出想法的话

  1. cppreference.com上,第一行:

    对象,引用,函数(包括函数模板特化)和表达式都有一个名为type的属性,它既限制了这些实体所允许的操作,又为其他通用的位序列提供了语义含义.

    我的问题:

    • 表达式有什么意思?它是评估后最终结果的类型吗?
    • 我不想在现阶段学习模板,这会妨碍学习基本部分(从你专家的角度来看)吗?我花了一些时间才意识到转发引用和右值引用是不同的东西,前者用于模板.
  2. 价值类别:

    我读到了这个答案 - 什么是rvalues,lvalues,xvalues,glvalues和prvalues?,这句话困扰我很多是身份,它也出现在cppreference.com上 - 值类别(第5行,glvalue).

    我的问题:我可以说identity ==我可以为它分配一个新值吗?

    • 我看到有人使用word / pointer这个词,但是那个has identity iff has address/pointer?我想要精确的术语.
    • 我在阅读cppreference.com时遇到了bit-field的想法,似乎给出了一个位字段结构a,它的位字段a.m没有地址?这是使用单词标识而不是地址/指针的原因吗?
    • 我发现了一篇博文解释这个,但它的左值定义是违反直觉的:左值表示一个资源无法重用的对象,为什么不呢?

c++ static-typing lvalue language-lawyer

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

C:自动存储类的数组?

我正在阅读C如何编程,我有一个关于数组存储类的问题.在书中它说:

数组和结构是"静态"实体,因为它们在整个程序执行期间保持相同的大小(当然,它们可以是自动存储类,因此每次进入和退出它们的块时都会创建和销毁它们)

我不确定是什么意思,我目前的理解是函数/ for/while是块.我尝试过以下方法:

...
for (size_t i=1; i<=2; i++) {
    printf("round %c:", i+'0');
    int a[10];
    show_array(a, 10); // this is a function that prints all elements of `a`.
    for (size_t j=0;j<10;j++) {
        a[j]=8;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了输出:

round 1:0,0,0,0,-1160480784,22023,-1160481168,22023,1594487680,32766,
round 2:8,8,8,8,8,8,8,8,8,8,
Run Code Online (Sandbox Code Playgroud)

它似乎int a[10]是静态的,而不是自动存储类,我错过了什么?(我了解四个存储类)

如果您需要此信息,我使用ideone.com运行我的测试.

c

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

为什么在全关联 TLB 中 LRU 实现成本高昂?

我有一本书的声明:

在全关联 TLB 中实现 LRU 非常昂贵,所以一般的方法是使用随机替换。

我不明白为什么在完整的关联缓存下它很昂贵。这不就是增加了一个额外的参考位......?

cpu-architecture tlb cpu-cache

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

Visual Studio 2017项目无法在Mac上的Parallels Desktop中运行/调试?

我真的需要你的帮助.我是新学习C#的人.我已经按照Head First C#的每个步骤进行操作.在本书中,Visual Studio版本是2012,它告诉我创建的项目类型是Blank App(XAML)Visual C#,我在Visual Studio 2017中找不到,因此我选择下面描述的类型.

关于我的电脑/系统:

软件:Microsoft Visual Studio 2017.

项目类型是:空白应用程序(通用Windows)Visual C#.

计算机:使用Parallels Desktop在Mac OSX上运行Windows10.

Parallels Desktop,是一种用于在Mac上运行Windows 10的虚拟机软件.我在这个虚拟机中创建了我的项目,在完成项目后按照书中的步骤,编辑器中没有错误.但在我按下绿色播放按钮后,我在下面发布了一些错误.

错误

c# visual-studio visual-studio-2017

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

为什么引用相同的常量会占用C++中不同的内存空间?

我对C++中引用的想法不熟悉,我有一个关于引用纯数字常量的内存分配的问题.(我想先检查的另一件事是我怀疑const引用,我经常遇到它,意味着引用const,但我不确定.)

这是我在ideone.com上的测试:

#include <stdio.h>

int main() {

    const int r0 = 123;
    const int &r1 = 123;
    const int &r2 = 123;
    const int &r3 = r2;

    printf("%p\n", (void *)&r0);
    printf("%p\n", (void *)&r1);
    printf("%p\n", (void *)&r2);
    printf("%p\n", (void *)&r3);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

0x7ffee3bd74c4
0x7ffee3bd74c8
0x7ffee3bd74cc
0x7ffee3bd74cc
Run Code Online (Sandbox Code Playgroud)

原因与此答案清楚r2相同- C++参考如何看待内存?,这说它取决于编译器.但是我在想,为什么编译器不也令,,都是一样的,因为所有具有相同的纯恒定值.(如果没有错误的搜索,则称为prvalue)r3r0r1r2123

作为一个注释:经过对该网站的一些搜索,我发现了一个最相关的问题 - 但在python中.虽然不同的语言,但我认为这个想法应该是相同/相似的:从链接,如果我的程序是用python编写的,那么123在内存空间中只有一个用于节省空间.

我读过的其他一些答案:

  1. C++做引用占用内存:这个答案表明如果有必要那么int &x实现为*(pointer_to_x) …

c++ reference

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

在多处理器系统中禁用中断的过程是什么?

我有一个教科书声明说在多处理器系统中不建议禁用中断,这会花费太多时间。但我不明白这一点,谁能告诉我多处理器系统禁用中断的过程?谢谢

cpu interrupt cpu-architecture multiprocessing

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

这个带有字符串文字的例子有什么问题?

我正在阅读这个网站的答案,其中说明以下内容未定义

char *fubar = "hello world";
*fubar++; // SQUARELY UNDEFINED BEHAVIOUR!
Run Code Online (Sandbox Code Playgroud)

但首先不是这样fubar++做,这意味着将指针移动到e,*()然后完成,这意味着提取e出来.我知道这应该是在聊天时问的(我是一个善良的人),但没有人在那里,所以我在这里要求吸引通知.

c string increment

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

关于否定 mips 中的符号整数?

我正在考虑如何否定 mips32 中的有符号整数。我的直觉是使用 2 的补码的定义,例如:(假设$s0是要否定的数字)

nor $t0, $s0, $s0   ; 1's complement
addiu $t0, $t0, 1   ; 2's = 1's + 1
Run Code Online (Sandbox Code Playgroud)

然后我意识到可以这样做:

sub $t0, $zero, $s0
Run Code Online (Sandbox Code Playgroud)

所以……有什么区别?哪个更快?IIRC sub 会尝试检测溢出,但是这个 make 会更慢吗?最后,有没有其他方法可以做到这一点?

assembly mips cpu-architecture micro-optimization mips32

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

关于函数指针的声明

我正在考虑以下两者之间的区别:

void *signal(int, void (*)(int))(int)
Run Code Online (Sandbox Code Playgroud)

void (*signal(int, void (*)(int)))(int)
Run Code Online (Sandbox Code Playgroud)

我知道后者来自这里 - 示例#3:"终极"(当我试着大声说出来理解它时,这是一次热闹的学习经历):

signal是一个函数(int, void (*)(int))作为输入并返回一个指向另一个获取(int)和返回的函数的指针void.

对于前者我认为,因为最后一个(int)会有更高的优先级,*所以它应该是语法错误,但是从cdecl.org,结果是:

["]声明信号为函数(int,指向函数的函数(int)返回void)返回函数(int)返回指向void [."]的指针

所以我需要一张支票.

c function-pointers

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

堆栈、堆和动态内存分配

我对这三个概念有些困惑:堆栈、堆和动态内存分配。我将提供 C++ 中的示例。

  1. 我说给定一个程序,对于它的所有变量、数组,也许还有堆栈上的对象,当程序刚刚启动时,所有需要的内存空间都已经存在,所以一切都是预先确定的吗?但是当程序运行时,对我来说它仍然听起来像“动态”,因为堆栈仍在变化,在运行时值仍在推入,从堆栈中弹出。

  2. 关于堆,对于“动态”的意义,我从这个站点上的一些答案中提出了这个想法,它是针对运行时确定的:

    cin >> box_size;
    int *box = new int[box_size];
    
    Run Code Online (Sandbox Code Playgroud)

    但是,那么这个怎么样:

    Box surprise_box = new Box();
    
    Run Code Online (Sandbox Code Playgroud)

    我已经知道编译时需要多少空间,对吗?但它仍然在堆上。所以看起来“动态”内存分配只是关于内存分配/释放的负担成为程序员的负担之一。

†:应该是Box *ptr_surprise_box = new Box();。(感谢评论)


我明白为什么我的问题被认为太宽泛了,但我不知道如何将它们分成几部分。更糟糕的是,现在我正在考虑这是否与地址空间和编译时确定的那些内存地址有关。

c++ operating-system dynamic-memory-allocation

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