相关疑难解决方法(0)

如果不在内存中,表达式和常量存储在哪里?

来自Brian W. Kernighan的C编程语言

&运算符仅适用于内存中的对象:变量和数组元素.它不能应用于表达式,常量或寄存器变量.

如果不在内存中,表达式和常量存储在哪里?这句话是什么意思?

例如:
&(2 + 3)

为什么我们不能拿它的地址?它存放在哪里?
对于C++,答案是否也一样,因为C一直是它的父级?

这个链接的问题解释了这样的表达式是rvalue对象,并且所有rvalue对象都没有地址.

我的问题是这些表达式存储在哪里,以至于无法检索到它们的地址?

c c++

47
推荐指数
4
解决办法
4435
查看次数

在C++中,所有临时值都是rvalues吗?

过去几年我一直用C++编写代码.但有一个问题我无法弄清楚.我想问一下,C++,rvalues都是临时工吗?

如果不是,任何人都可以提供一个例子,其中代码中的临时生成是左值

c++ rvalue temporaries

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

为什么临时取rvalue的地址是违法的?

根据" 如何绕过警告"rvalue用作左值"? ",Visual Studio只会警告代码如下:

int bar() {
   return 3;
}

void foo(int* ptr) {

}

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

在C++中,不允许获取临时(或者至少是由rvalue表达式引用的对象?)的地址,我认为这是因为临时保证甚至不能保存.

但是,虽然诊断程序可能以编译器选择的任何形式呈现,但我仍然期望MSVS 出错而不是在这种情况下发出警告.

那么,临时保证有储存吗?如果是这样,为什么上面的代码首先被禁止?

c++

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

是否从临时有效的 C++ 代码中获取引用?

我使用了以下语法糖:

for (auto& numberString: {"one", "two", "three", "four"}) { /* ... */}
Run Code Online (Sandbox Code Playgroud)

这是有效的代码吗?AFAIK,基于这个问题,这应该是非法的,但代码按预期运行。我认为我对此事的理解不正确。

据我所知,只有文字不应该有内存地址,但链接的问题正在讨论临时值和右值

c++ reference temporary-objects c++17

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

标签 统计

c++ ×4

c ×1

c++17 ×1

reference ×1

rvalue ×1

temporaries ×1

temporary-objects ×1