草庐IT

c++ - 为什么分配给 substr 调用的结果不是编译器错误?

我刚刚发现了最令人困惑的错误,我不明白为什么编译器没有为我标记它。如果我写以下内容:strings="abcdefghijkl";cout编译器对此没有任何问题,并且根据打印出来的内容,赋值语句似乎没有效果。相比之下,s.front()='x';具有改变底层字符串的效果(因为front返回对字符的引用),并且s.length()=4;还具有生成编译器错误的预期效果,提示您不能分配给不是左值的东西,因为length返回一个整数。(嗯,一个size_t反正。)那么...为什么编译器不提示分配给substr调用的结果?它返回一个字符串值,而不是引用,所以它不应该是可分配的,对吧?但是我已经在

c++ - 三元运算符为什么以及何时返回左值?

长期以来,我一直认为三元运算符总是返回一个右值。但令我惊讶的是,事实并非如此。在下面的代码中,我没有看到foo的返回值和三元运算符的返回值之间的区别。#includeintg=20;intfoo(){returng;}intmain(){inti=2,j=10;foo()=10;//notOk((i 最佳答案 i和j都是glvalues(有关详细信息,请参阅thisvaluecategoryreference)。那么如果你读到thisconditionaloperatorreference我们就到了这一点:4)IfE2andE3ar

c++ - 三元运算符为什么以及何时返回左值?

长期以来,我一直认为三元运算符总是返回一个右值。但令我惊讶的是,事实并非如此。在下面的代码中,我没有看到foo的返回值和三元运算符的返回值之间的区别。#includeintg=20;intfoo(){returng;}intmain(){inti=2,j=10;foo()=10;//notOk((i 最佳答案 i和j都是glvalues(有关详细信息,请参阅thisvaluecategoryreference)。那么如果你读到thisconditionaloperatorreference我们就到了这一点:4)IfE2andE3ar

c++ - 返回类型 '?:'(三元条件运算符)

为什么第一个返回引用?intx=1;inty=2;(x>y?x:y)=100;而第二个没有?intx=1;longy=2;(x>y?x:y)=100;实际上,第二个根本没有编译——“notlvalueleftofassignment”。 最佳答案 表达式没有返回类型,它们有一个类型和-正如最新的C++标准中所知道的-一个值类别。条件表达式可以是左值或右值。这是它的值(value)范畴。(这有点简化,在C++11中我们有左值、xvalue和prvalue。)在非常广泛和简单的术语中,lvalue是指内存中的对象,而rvalue只是一个

c++ - 返回类型 '?:'(三元条件运算符)

为什么第一个返回引用?intx=1;inty=2;(x>y?x:y)=100;而第二个没有?intx=1;longy=2;(x>y?x:y)=100;实际上,第二个根本没有编译——“notlvalueleftofassignment”。 最佳答案 表达式没有返回类型,它们有一个类型和-正如最新的C++标准中所知道的-一个值类别。条件表达式可以是左值或右值。这是它的值(value)范畴。(这有点简化,在C++11中我们有左值、xvalue和prvalue。)在非常广泛和简单的术语中,lvalue是指内存中的对象,而rvalue只是一个