8得票3回答
表达式必须是可修改的左值(字符数组)

我定义了一个结构体如下: struct: struct taxPayer{ char name[25]; long int socialSecNum; float taxRate; float income; float taxes; }; 我的主要功能包括: t...

9得票1回答
C++标准在哪里说::delete可以改变lvalues?

我遇到了第一个编译器,它会改变传递给::delete的lvalue,但不会将其清零。也就是说: Foo * p = new Foo(); Foo * q = p; assert(p != 0); assert(p == q); ::delete p; assert(p != q)...

15得票3回答
什么是对象的动态类型?

我认为动态类型指的是使用new动态分配的对象。在下面的情况中,你认为p指向的是动态类型还是静态类型?在标准中,并没有说明动态类型是动态对象。 1.3.3 - lvalue表达式所表示的lvalue引用的最派生对象(1.8)的类型。[例如:如果指针(8.3.1)p的静态类型为“指向类B的...

8得票1回答
指针是左值还是右值?

在另一篇文章中,我遇到了以下内容: (5.2.9/8) 类型为“指向类型为cv1 T的D类成员”的右值可以转换为类型为“指向类型为cv2 T的B类成员”的右值,其中B是D类的基类(第10条款), 请注意这是语言标准中的内容。因此我的问题是, int i = 0; int *p = &...

18得票2回答
为什么C语言中的复合字面量是可修改的?

通常人们将“不可修改的”与字面量联系起来char* str = "Hello World!"; *str = 'B'; // Bus Error! 然而,当使用复合文字时,我很快发现它们是完全可修改的(并且查看生成的机器代码,您会看到它们被推送到堆栈上):char* str = (char[...

12得票1回答
一个lvalue引用的非类型模板参数可否被推断?

我有下面的代码,但是它无法正常运行:struct foo {}; foo foo1 = {}; template <foo& F> class FooClass {}; template <foo& F> void foobar(FooClass&l...

13得票1回答
将右值引用传递给const左值引用参数

我正在尝试理解C++11中的rvalue引用,并学习如何在代码中使用它们以获得最佳性能。 假设我们有一个类A,它具有指向大量动态分配数据的成员指针。 此外,还有一个方法foo(const A& a),对类A的对象进行某些操作。 当对象A被传递给函数foo时,我想防止调用A的复制构...

9得票4回答
需要lvalue作为增量操作数错误

#include <stdio.h> int main() { int i = 10; printf("%d\n", ++(-i)); // <-- Error Here } "++(-i)"这个表达式有什么问题?请解释一下。

13得票8回答
指针转换不会产生lvalue。为什么?

在我发布了一篇最具争议性的回答之后(这里),我敢于提出一些问题并最终填补了我的一些知识空白。 为什么类似于((type_t*)x)这样的表达式不被视为有效的左值,假设x本身是一个指针和一个左值,而不仅仅是某个表达式? 我知道很多人会说“标准不允许”,但从逻辑角度来看,这似乎是合理的。标准禁...

10得票2回答
rvalue引用和lvalue引用作为函数参数的区别

阅读完这篇文章:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html,我还是无法理解当你编写函数时,需要以左值或右值引用作为参数的情况,例如这样: void printRefe...