C++11中的String&&

String&&并不是指“引用的引用”,也不存在“引用的引用”这种东西。String&& 和 String&是两码事。

  String&&是C++11中的特性,叫做“右值引用”。它只能绑定到右值,即临时对象或将销毁的对象。因此可以把String&&所引用的资源强制拿来使用,且不用重新分配空间。即把String&&所引用对象的资源复制给*this。

例子:

String& operator=(String&& rhs)
{
	swap(rhs);
	return *this;
}

String(String&& rhs)
	: data_(rhs.data_)
{
	rhs.data_ = nullptr;
}

String用=赋值时,将rhs赋给*this。或是构造函数中将rhs.data_赋给this.data_,然后将其置空。

这种赋值运算符叫做“移动赋值运算符”,这种构造函数叫做“移动构造函数”。顾名思义,不同于以往的复制一份赋给新对象。而是直接通过“移动”的方式赋给新对象。这样的话效率会更高一点。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 FORTRAN90 调用 C++ 函数,需要使用 `iso_c_binding` 模块来声明 C++ 函数,并使用 `c_f_pointer` 函数将 C++ 函数指针转换为 FORTRAN90 的指针类型。下面是一个示例代码,展示了如何声明并调用 C++ 的函数: ``` #include <string> #include <iostream> extern "C" { void my_cpp_function(const std::string& str) { std::cout << "The string received in C++ is: " << str << std::endl; } } ``` 在 FORTRAN90 ,您需要使用 `iso_c_binding` 模块来声明 C++ 函数,并使用 `c_f_pointer` 函数将函数指针转换为 FORTRAN90 的指针类型。示例代码如下: ``` program main use iso_c_binding interface subroutine my_cpp_function(str) bind(C, name="my_cpp_function") import :: C_CHAR type(c_ptr), value :: str end subroutine my_cpp_function end interface character(len=20) :: my_string = "Hello from FORTRAN" type(c_ptr) :: my_string_ptr ! Convert the FORTRAN string to a C string pointer call c_f_pointer(c_loc(my_string), my_string_ptr) ! Call the C++ function using the C string pointer call my_cpp_function(c_char_pointer(my_string_ptr)) end program main ``` 在代码,首先使用 `interface` 关键字声明 C++ 函数 `my_cpp_function`,并使用 `bind(C)` 来指定函数的 C 风格命名。使用 `C_CHAR` 来声明 C++ 函数的参数类型。`c_f_pointer` 函数将字符串类型的 `my_string` 转换为指针类型,并将其传递给 `my_cpp_function` 函数。在调用 `my_cpp_function` 函数时,需要使用 `c_char_pointer` 函数将字符串指针转换为 C 字符串指针。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值