C11版本有哪些具体特点?

更新于
2026-10-10 08:48:31
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计514个文字,预计阅读时间需要3分钟。

C11版本有哪些具体特点?

cpp%E4%BD%BF%E7%94%A8inline RefPtr%E7%B1%BB%E5%9E%8B%E5%AE%9E%E7%8E%B0%E6%8D%95%E5%8F%96%E6%93%8D%E4%BD%9C%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%BD%BB%E6%9D%BE%E6%94%B9%E5%8F%98%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%8C%87%E5%90%91%EF%BC%8C%E4%B8%8D%E9%9C%80%E8%A6%81%E6%95%B0%E5%97%A7%EF%BC%8C%E4%B8%8D%E8%B6%85%E8%BF%87100%E5%AD%97%EF%BC%9Ainline RefPtr(RefPtrT other) { _ptr=other._ptr; other._ptr=nullptr; }

inline RefPtr(RefPtr<T> && other) { _ptr = other._ptr; other._ptr = nullptr; }

最近在看cocos2dx的源代码,发现了一个模板类有一个奇怪的语法&&:

刚开始一阵犯晕,一个类型Ref<T>和一个似乎是形参的other与操作会得出一个什么?显然这种理解是错误的。。

“&&”还有一种含义是右值引用,表示形参是一个右值。

**左值 右值:**

int a = 0;

a是一个左值,左值是一个变量,可以被引用和多次使用。0是一个右值,不可以被引用。

左值一般是非临时变量,可以多次使用。右值只在当前表达式有效。

看一下右值引用的用法:

class MyClassB { public: void init(int & intval) { cout<<"use & print"<<endl;}; void init(int &&intval) { cout<<"use && print"<<endl;} }; int main(void) { int ae = 10; MyClassB().init(10); MyClassB().init(ae); return 0; }

可以看出,传入不同类型的值,编译器自动识别调用了不同的函数。

右值引用是用来支持转移语义的。转移语义可以将资源 ( 堆,系统对象等 ) 从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,能够大幅度提高 C++ 应用程序的性能。临时对象的维护 ( 创建和销毁 ) 对性能有严重影响。

C11版本有哪些具体特点?


本文共计514个文字,预计阅读时间需要3分钟。

C11版本有哪些具体特点?

cpp%E4%BD%BF%E7%94%A8inline RefPtr%E7%B1%BB%E5%9E%8B%E5%AE%9E%E7%8E%B0%E6%8D%95%E5%8F%96%E6%93%8D%E4%BD%9C%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%BD%BB%E6%9D%BE%E6%94%B9%E5%8F%98%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%8C%87%E5%90%91%EF%BC%8C%E4%B8%8D%E9%9C%80%E8%A6%81%E6%95%B0%E5%97%A7%EF%BC%8C%E4%B8%8D%E8%B6%85%E8%BF%87100%E5%AD%97%EF%BC%9Ainline RefPtr(RefPtrT other) { _ptr=other._ptr; other._ptr=nullptr; }

inline RefPtr(RefPtr<T> && other) { _ptr = other._ptr; other._ptr = nullptr; }

最近在看cocos2dx的源代码,发现了一个模板类有一个奇怪的语法&&:

刚开始一阵犯晕,一个类型Ref<T>和一个似乎是形参的other与操作会得出一个什么?显然这种理解是错误的。。

“&&”还有一种含义是右值引用,表示形参是一个右值。

**左值 右值:**

int a = 0;

a是一个左值,左值是一个变量,可以被引用和多次使用。0是一个右值,不可以被引用。

左值一般是非临时变量,可以多次使用。右值只在当前表达式有效。

看一下右值引用的用法:

class MyClassB { public: void init(int & intval) { cout<<"use & print"<<endl;}; void init(int &&intval) { cout<<"use && print"<<endl;} }; int main(void) { int ae = 10; MyClassB().init(10); MyClassB().init(ae); return 0; }

可以看出,传入不同类型的值,编译器自动识别调用了不同的函数。

右值引用是用来支持转移语义的。转移语义可以将资源 ( 堆,系统对象等 ) 从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,能够大幅度提高 C++ 应用程序的性能。临时对象的维护 ( 创建和销毁 ) 对性能有严重影响。

C11版本有哪些具体特点?