`
3895177
  • 浏览: 23648 次
社区版块
存档分类
最新评论

const总结三 之 常量函数返回值

    博客分类:
  • c++
 
阅读更多

先贴代码:

class Return
{
public:
	Return(void);
	~Return(void);

	const int getInt();
	const int* getIntPointL();
	int* const getIntPointR();
};

 

#include "Return.h"


Return::Return(void)
{
}


Return::~Return(void)
{
}


const int Return::getInt()
{
	return 10;
}
const int* Return::getIntPointL()
{
	int* i = new int(10);
	return i;
}
int* const Return::getIntPointR()
{
	int* i = new int(10);
	return i;
}

 

main入口:

#include <iostream>
using namespace std;

#include "Return.h"

void main()
{
	Return* ret = new Return();
	
	//常量返回值可以复制给非常量
	int rInt = ret->getInt();
	//常量返回值可以复制给常量
	const int rcInt = ret->getInt();

	//int* pIntL = ret->getIntPointL();//error C2440: “初始化”: 无法从“const int *”转换为“int *”
	/************************************************************************/
	/*    const int *的内容是不能修改的,如果现在赋值给pIntL,而pIntL又不是
		常量,那么可以通过pIntL去修改内容。那么返回的const int *也就没意义了。
	/************************************************************************/
	const int* pIntL = ret->getIntPointL();

	int* pIntR = ret->getIntPointR();
	/************************************************************************/
	/* 这里的int* const 居然可以赋值给int*,那我这里觉得返回int* const 没有什么意义
	/************************************************************************/
	int* const pIntRx = ret->getIntPointR();
}

 总结与疑问:

在函数返回的时候,采用常量,就可以保护返回的内容不受修改,如上例的返回 const int * 。它保护了返回的指针所指向的内容不受修改。

但是,返回 int* const ,其用意就是保护返回的指针值不受到修改,但是它居然可以复制给int*。我觉得返回int* const 的意义就是返回值必须赋值给int* const 的变量,这样程序员在编码过程或者在编译的时候,就必须保证这个指针值必须是常量,不可修改,才能通过编译。那么返回int* const 才有意义。

这方面不是很懂,希望有人就这个问题发表一下看法,让我也能学习一下。

分享到:
评论

相关推荐

    C++ 常量成员常量返回值详解

    普通类型的返回常量的函数的目的是为了让成员函数返回值之间不能进行运算,防止产生丑陋的代码,返回值是常量的函数,说明该类内的这个值是外部使用者不能轻易改变的, 可以让类的声明的含义更加贴切,更加易于理解...

    const修饰类的成员函数

    3. **返回值类型**:`const`成员函数的返回值类型不受`const`关键字的影响。这意味着即使一个成员函数被声明为`const`,它也可以返回一个非常量的引用或指针等。 #### 六、总结 通过使用`const`关键字修饰类的成员...

    函数指针和指针函数,const的用法,指针常量,常量指针的用法

    这里的“函数类型”指的是函数返回值的类型,“形参列表”则指定了函数的参数列表。例如: ``` int (*f)(int x); // 定义了一个指向接受一个整型参数并返回整型值的函数的指针 double (*ptr)(double x); // 定义了一...

    C语言中const使用说明

    总结,`const`在C语言中扮演着至关重要的角色,它可以用于声明常量、创建只读变量、修饰指针、函数参数以及成员函数,帮助我们编写更安全、更清晰的代码。理解和正确使用`const`是成为熟练C程序员的关键一步。

    C++常量详解二(常量形参,常量返回值,常量成员函数)

    在本篇文章中,我们将深入探讨 C++ 常量的三个方面:常量形参、常量返回值和常量成员函数。 1.常量形参 在 C++ 中,当形参有顶层 const 或者底层 const 时,传给它常量对象或者非常量对象都是可以的。但是,如果...

    Const,Const函数,Const变量,函数后面的Const.txt

    - **概念**:当一个函数返回`const`类型的值时,意味着该返回值不能被后续的操作所修改。 - **示例**:假设我们有一个函数,它返回一个常量字符串: ```cpp const char* GetString(void); ``` 正确的做法是将...

    c语言const用法小结

    const 是 C 语言中一种非常重要的关键字,它可以用来修饰变量、指针、函数返回值、函数参数和成员函数等。 const 的使用可以提高代码的安全性和可读性,本文将对 const 的各种用法进行总结。 1. const 常量 const ...

    c语言之const用法

    C 语言之 const 用法 ...const 可以用来定义常量,修饰指针、函数的输入参数和返回值。const 的目的是为了产生高质量的代码,提高代码的可读性,同时保护好不能被任意改变的内存,从而降低 Bug 的概率。

    C++中const用法总结

    #### 四、const修饰函数返回值 `const` 也可以用来修饰函数的返回值,这在某些情况下是有意义的。 1. **修饰返回的简单类型**: - `const int fun1();` - 这种情况下,`const` 几乎没有实际作用,因为返回值本身...

    Const 用法小结

    - `const`可以修饰函数返回值,表示返回值不可修改,如`const A fun2();` - 修饰函数参数,保护参数不被函数内部修改,如`void fun0(const A* a );`,防止函数通过指针修改传入对象的值。 - 修饰成员函数,表示...

    C++中const用法总结.doc

    使用`const`修饰函数返回值意味着返回的值不应被修改。例如: - `const int fun1()`:无实际意义,因为返回值会被赋值操作。 - `const int * fun2()`:返回的指针所指内容为常量,不能修改。 - `int* const fun3...

    const和define用法

    4. 函数修饰符:const 可以用来修饰函数参数、函数返回值,在 C++ 里还可以用来修饰函数,定义类中某个成员函数为常量函数。 为什么 const 正在取代 #define 由于 const 常量有更多的优点,例如数据类型、类型安全...

    C++中const用法全解

    C++ 中 const 用法全解 const 在 C++ 中占有重要作用,属于小兵立大功的...const 是 C++ 中一个非常重要的关键字,它可以用来修饰变量、指针、函数参数和函数返回值等。正确使用 const 可以提高程序的安全性和可读性。

    C++中const总结.ppt

    - **编译器处理方式**:宏定义发生在预处理阶段,而const常量在编译和运行阶段使用。 - **类型和安全检查**:宏定义不检查类型,仅做文本替换;const常量在编译阶段会进行类型检查,保证安全性。 - **存储方式**...

    使用const提高函数的健壮性

    函数返回值也可以使用const修饰。如果函数返回的是指针类型数据,可以通过const修饰返回值以防止通过返回的指针修改数据。当返回值是通过值传递时,const修饰通常没有意义,因为返回值会在外部创建副本,而const修饰...

    关于C++ const 的全面总结

    - `const`修饰函数返回值,表示返回值是一个常量。 ```cpp const int fun1(); // 返回值不可改变 ``` - 当返回值是指针时,可以进一步区分是只保护指针还是指针指向的内容。 ```cpp const int* fun2(); // ...

Global site tag (gtag.js) - Google Analytics