如何将禁止函数传值调用的方法改写成长尾?

2026-04-19 01:440阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

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

如何将禁止函数传值调用的方法改写成长尾?

代码编译运行环境:VS2017 + Debug + Win32,参数格式不同。C++ 应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用。

代码编译运行环境:VS2017+Debug+Win32

按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。

传值调用与后面两者的区别在于传值调用在进入函数体之前,会在栈上建立一个实参的副本,而引用和指针调用没有这个动作。建立副本的操作是利用拷贝构造函数进行的。因此,要禁止传值调用,就必须在类的拷贝构造函数上做文章。

可以直接在拷贝构造函数中抛出异常,这样就迫使程序员不能使用拷贝构造函数,否则程序总是出现运行时错误。但是,这不是一个好的办法,应该在编译的阶段就告诉程序员,不能使用该类的拷贝构造函数。

1.不显示定义拷贝构造函数可行吗?

#include <iostream> using namespace std; class A { public: int num; A(){num=5;} }; void show(A a) { cout<<a.num<<endl; } int main() { A obj; show(obj); }

以上程序顺利通过编译,并输出5。因此,不显示定义拷贝构造函数,并不能阻止对类的拷贝构造函数的调用,原因是编译器会自动为没有显示定义拷贝构造函数的类提供一个默认的拷贝构造函数。

阅读全文
标签:方法代码

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

如何将禁止函数传值调用的方法改写成长尾?

代码编译运行环境:VS2017 + Debug + Win32,参数格式不同。C++ 应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用。

代码编译运行环境:VS2017+Debug+Win32

按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。

传值调用与后面两者的区别在于传值调用在进入函数体之前,会在栈上建立一个实参的副本,而引用和指针调用没有这个动作。建立副本的操作是利用拷贝构造函数进行的。因此,要禁止传值调用,就必须在类的拷贝构造函数上做文章。

可以直接在拷贝构造函数中抛出异常,这样就迫使程序员不能使用拷贝构造函数,否则程序总是出现运行时错误。但是,这不是一个好的办法,应该在编译的阶段就告诉程序员,不能使用该类的拷贝构造函数。

1.不显示定义拷贝构造函数可行吗?

#include <iostream> using namespace std; class A { public: int num; A(){num=5;} }; void show(A a) { cout<<a.num<<endl; } int main() { A obj; show(obj); }

以上程序顺利通过编译,并输出5。因此,不显示定义拷贝构造函数,并不能阻止对类的拷贝构造函数的调用,原因是编译器会自动为没有显示定义拷贝构造函数的类提供一个默认的拷贝构造函数。

阅读全文
标签:方法代码