在访问说明符之前放置一个常量限定的内联成员函数是错误的吗?

时间:2013-08-12 13:57:15

标签: c++ visual-studio-2012 compiler-errors const

我在Visual Studio中遇到了一些奇怪的东西。

如果您放置const限定的成员函数(即;以const结尾),则不允许您放置访问说明符(即; public,{{1 }}或protected)紧随其后。

enter image description here

private

如果您更改成员函数原型的顺序并在访问说明符之前放置非const成员函数,那么一切都会得到修复(编译并运行,没有错误)。

enter image description here

    // ...
    int GetFour() { return 4; } const
private:
    static ClassName * Instance;
    Settings();
    // ...

我想知道这是否是C ++中的规则,只是Visual Studio中的一个错误或我做过的事情?

(版本:Visual Studio Ultimate 2012 Update 3)

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; }