64得票3回答
为什么移动物体比复制更快?

我听过Scott Meyers说过"std::move()不会移动任何东西" ... 但我不明白它的意思。 所以为了明确我的问题,请考虑以下内容: class Box { /* things... */ }; Box box1 = some_value; Box box2 = box1;...

59得票9回答
Go语言中临时变量的地址?

如何以最简洁的方式处理这种情况: func a() string { /* doesn't matter */ } b *string = &a() 这会生成错误: 无法获取a()的地址 我的理解是,如果取一个局部变量的地址,Go会自动将其提升到堆上。在这里,很...

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得票4回答
在函数内部使用时,rvalue引用是否被视为lvalue?

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

45得票5回答
这里的const修饰符是不必要的吗?

"Effective C++" 的第3条规则是“尽可能使用const”,并且它给出了一个示例:const Rational operator*(const Rational& lhs, const Rational& r...

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

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

35得票4回答
rvalue引用允许悬空引用吗?

请考虑以下内容。#include <string> using std::string; string middle_name () { return "Jaan"; } int main () { string&& danger = middl...