栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11 右值引用容易疏忽的两个点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11 右值引用容易疏忽的两个点

右值引用的形参,使用时自动变成左值
#include 
#include 
 
void f(int& x) {
    std::cout << "lvalue reference overload f(" << x << ")n";
}
 
void f(const int& x) {
    std::cout << "lvalue reference to const overload f(" << x << ")n";
}
 
void f(int&& x) {
    std::cout << "rvalue reference overload f(" << x << ")n";
}
 
int main() {
    int i = 1;
    const int ci = 2;
    f(i);  // calls f(int&)
    f(ci); // calls f(const int&)
    f(3);  // calls f(int&&)
           // would call f(const int&) if f(int&&) overload wasn't provided
    f(std::move(i)); // calls f(int&&)
 
    // rvalue reference variables are lvalues when used in expressions
    int&& x = 1;
    f(x);            // calls f(int& x)
    f(std::move(x)); // calls f(int&& x)
}
	Rule& addElement(Element&& element)
	{
		// element在使用的时候会自动变成左值,需要用std::move强制转换右值
		ruleElements.push_back(std::move(element));
		return *this;
	}
右值拷贝构造函数需要添加noexcept

 

	Element(Element&& r) noexcept
	{
		*this = r;
		printf("Element(Element&& r)n");
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号