我在Visual Studio中遇到了一些奇怪的东西。
如果您放置const
限定的成员函数(即;以const
结尾),则不允许您放置访问说明符(即; public
,{{1 }}或protected
)紧随其后。
private
如果您更改成员函数原型的顺序并在访问说明符之前放置非const成员函数,那么一切都会得到修复(编译并运行,没有错误)。
// ...
int GetFour() { return 4; } const
private:
static ClassName * Instance;
Settings();
// ...
我想知道这是否是C ++中的规则,只是Visual Studio中的一个错误或我做过的事情?
(版本:Visual Studio Ultimate 2012 Update 3)
答案 0 :(得分:3)
int GetFour() { return 4; } const
错误的地方。
这是正确的:
int GetFour() const { return 4; }
也就是说,const
出现在函数()
之后和{
之前。
以下代码将编译:
int GetFour() { return 4; } const
int NonConstFunc();
因为const
之后的}
被视为下一个函数的返回类型的部分。所以上面实际上是这样的:
int GetFour() { return 4; }
const int NonConstFunc();
希望有所帮助。
答案 1 :(得分:3)
你的语法错了。您将const
放在函数定义之后。你需要这个:
int GetFour() const { return 4; }
// ^^^^^
您的第二个变体不会产生编译器错误的原因是它会像这样解析
int GetFour() { return 4; }
const int GetFive() { return 5; }
答案 2 :(得分:1)
const
位置错误。它应该在{
之前。
int GetFour() const { return 4; }