当前位置:  开发笔记 > 编程语言 > 正文

这是'type variableofType()'函数还是对象?

如何解决《这是'typevariableofType()'函数还是对象?》经验,为你挑选了2个好方法。

错误发生在main函数的第一行:

name varName();

没有使用默认构造函数创建类实例,实际上是在声明一个名为varName的新函数,没有参数,它返回一个名称实例.

你应该写:

name varName;


Johannes Sch.. 8

我认为值得告诉你一个类似的问题,这也会导致麻烦:

struct foo { };
struct bar { bar(foo f); };

int main() {
  // does *not* create a bar object initialized by a default constructed 
  // foo object.
  bar b(foo());
}

b实际上是一个函数,它返回一个bar并将第一个参数作为一个指向函数的指针,该函数返回一个不带参数的foo.它与以下相同:

bar b(foo(*)());

如果要创建由默认构造的foo初始化的bar对象,请在参数周围加上括号.这使它看起来不再像函数声明,编译器会像你想要的那样解释它:

bar b((foo()));

还有一些非显而易见的情况是应该提高编译器错误.GCC错了,但是Comeau再次正确.请考虑以下代码段

struct foo {
  static bool const value = false;
};

int main() {
  int v(int(foo::value));
}

你可能会期望这需要静态常量,并将其转换为int,将v变量初始化为0?不,它不会根据标准,因为初始化程序可以被解释为声明,根据纯语法分析,如下所示

struct foo {
  static int value;
};

// valid, parentheses are redundant! Defines `foo::value`.
int (foo::value); 

每当初始化程序可以被解释为声明时,在这种情况下整个声明将声明一个函数.因此,该行main声明了如下函数,省略了冗余和无意义的括号

int v(int foo::value);

这将在解析函数声明时导致编译器错误,因为函数参数名称可能不合格.



1> MiniQuark..:

错误发生在main函数的第一行:

name varName();

没有使用默认构造函数创建类实例,实际上是在声明一个名为varName的新函数,没有参数,它返回一个名称实例.

你应该写:

name varName;



2> Johannes Sch..:

我认为值得告诉你一个类似的问题,这也会导致麻烦:

struct foo { };
struct bar { bar(foo f); };

int main() {
  // does *not* create a bar object initialized by a default constructed 
  // foo object.
  bar b(foo());
}

b实际上是一个函数,它返回一个bar并将第一个参数作为一个指向函数的指针,该函数返回一个不带参数的foo.它与以下相同:

bar b(foo(*)());

如果要创建由默认构造的foo初始化的bar对象,请在参数周围加上括号.这使它看起来不再像函数声明,编译器会像你想要的那样解释它:

bar b((foo()));

还有一些非显而易见的情况是应该提高编译器错误.GCC错了,但是Comeau再次正确.请考虑以下代码段

struct foo {
  static bool const value = false;
};

int main() {
  int v(int(foo::value));
}

你可能会期望这需要静态常量,并将其转换为int,将v变量初始化为0?不,它不会根据标准,因为初始化程序可以被解释为声明,根据纯语法分析,如下所示

struct foo {
  static int value;
};

// valid, parentheses are redundant! Defines `foo::value`.
int (foo::value); 

每当初始化程序可以被解释为声明时,在这种情况下整个声明将声明一个函数.因此,该行main声明了如下函数,省略了冗余和无意义的括号

int v(int foo::value);

这将在解析函数声明时导致编译器错误,因为函数参数名称可能不合格.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有