0

我在 Visual Studio 中遇到了一些奇怪的事情。

如果您放置一个const合格的成员函数(即;以 结尾const),则不允许在其后放置访问说明符(即;publicprotectedprivate

在此处输入图像描述

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

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

在此处输入图像描述

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

我想知道这是否是 C++ 中的规则,只是 Visual Studio 中的错误还是我做了什么?

(版本:Visual Studio Ultimate 2012 Update 3)

4

3 回答 3

3
int GetFour() { return 4; } const

错误的地方。

这是对的:

int GetFour() const { return 4; } 

也就是说,const出现在函数之后()和之前{


以下代码将编译:

int GetFour() { return 4; } const
int NonConstFunc();

因为constafter}被认为是下一个函数的返回类型的一部分。所以上面其实是这样的:

int GetFour() { return 4; }  
const int NonConstFunc();

希望有帮助。

于 2013-08-12T13:58:58.927 回答
3

你的语法是错误的。您将放在const函数定义之后。你需要这个:

int GetFour() const { return 4; }
//            ^^^^^

您的第二个变体不会产生编译器错误的原因是它被这样解析

int GetFour() { return 4; } 
const int GetFive() { return 5; }
于 2013-08-12T13:59:07.780 回答
1

const是在错误的地方。它应该在{.

int GetFour() const { return 4; }
于 2013-08-12T13:58:30.450 回答