2010-12-08 84 views
9

我可以在C++中声明一个非成员函数(全局函数,可能)为const吗?我明白const关键字实际上应用于在成员函数中传递的隐式“this”参数。也因为只有成员函数遵循“thiscall”调用约定,const可以用于非成员函数吗?我可以在C++中声明一个非成员函数const吗?

撇开我试图通过声明非成员函数const来做的事情,编译器会报告错误吗?

+6

“撇开......”我不明白它是如何放在一边的,真的。至于编译器是否会报告错误,为什么不只是**尝试**? – 2010-12-08 12:02:01

+0

@Karl Knechtel:因为有些编译器可能(理论上)发出警告而不是错误,或者接受它作为扩展? – MSalters 2010-12-08 14:28:25

+0

@Karl:gcc拥有这个任务的`__pure__`和`__const__`属性,并且它们是属性,因为它们是非标准的。 – 2010-12-08 14:53:45

回答

15

不,只有非静态成员函数可以const合格。

你对常量非成员函数的期望是什么?如果你想强制没有参数被函数修改,只需通过const引用。

0

要回答第二个问题:试图对非成员使用成员函数语法(即void foo() const;)是语法违规。因此,编译器必须提供诊断信息 - 无论是错误还是警告。它可能不会默默地忽略const。但是,它可能会报告警告,然后假装const不在那里并生成可执行文件。