216得票4回答
'?:'(三元/条件运算符)的结果类型是什么?

为什么第一个条件运算符会返回一个引用? int x = 1; int y = 2; (x > y ? x : y) = 100; 然而,第二个不。 int x = 1; long y = 2; (x > y ? x : y) = 100; 实际上,第二个根本无法编译。 ...

92得票10回答
为什么 a+++++b 不起作用?

int main () { int a = 5,b = 2; printf("%d",a+++++b); return 0; } 这段代码会出现以下错误: error: lvalue required as increment operand 但是,如果我在 a+...

86得票4回答
为什么我可以将返回值的函数结果赋值给一个变量?它是一个左值吗?

考虑以下代码:struct foo { int a; }; foo q() { foo f; f.a =4; return f;} int main() { foo i; i.a = 5; q() = i; } 没有编译器会对此抱怨,甚至包括Clang。为什么 q() = ...

58得票1回答
不同编译器下的std::is_same结果不同

#include <iostream> int main() { bool b = true; std::cout << std::is_same<decltype(!(!b)), bool>::value << "\...

54得票4回答
如何在C++中编程确定一个表达式是右值还是左值?

在C++中,确定表达式是右值还是左值的最佳方法是什么?也许在实践中这并不有用,但因为我正在学习右值和左值,所以我认为编写一个名为 is_lvalue 的函数会很好,如果传入的表达式是左值,则返回true,否则返回false。 示例:std::string a("Hello"); is_lva...

52得票7回答
接受左值和右值参数的函数

有没有一种在C++中编写既能接受lvalue参数又能接受rvalue参数的函数的方法,而不将其作为模板? 例如,假设我编写了一个函数print_stream,它从istream中读取并将读取的数据打印到屏幕上或其他地方。 我认为可以像这样调用print_stream:fstream fil...

46得票1回答
表达式必须是可修改的左值

我这里有一个char text[60]; 然后我在一个if语句中执行以下操作:if(number == 2) text = "awesome"; else text = "you fail"; 它总是报错说表达式必须是可修改的左值。

46得票4回答
在函数内部使用时,rvalue引用是否被视为lvalue?

我发布了这个答案:https://dev59.com/OIfca4cB1Zd3GeqPnMXi#28459180,其中包含以下代码: void foo(string&& bar){ string* temp = &bar; cout <<...

43得票3回答
为什么和何时三元运算符会返回一个左值?

很长一段时间以来,我一直认为三目运算符始终会返回一个rvalue。但令我惊讶的是它并不是这样。在下面的代码中,我看不出 foo 的返回值和三目运算符的返回值之间有什么区别。#include <iostream> int g = 20 ; int foo() { retur...

41得票4回答
内置赋值运算符的返回类型是什么?

我刚开始学习C++,对于赋值运算符和解引用运算符的返回类型有些困惑。我正在按照《C++ Primer》这本书学习。在不同的场合,作者说赋值运算符的返回类型是左操作数的引用类型,但后来又说返回类型是左操作数的类型。我查阅了C++11标准第5.17节,其中将返回类型描述为“引用左操作数的左值”。 ...