【发布时间】:2014-10-14 01:14:30
【问题描述】:
#include <iostream>
using namespace std;
struct test
{
test(){cout<<"class"<<endl;}
};
void test(){cout<<"function"<<endl;}
int main()
{
test();
return 0;
}
输出:
function
(VS2013 和 gcc 4.8.1)
为什么选择函数?是不是模棱两可?
【问题讨论】:
-
我认为编译器选择函数是因为一个类永远不会用它的基名调用。如果你删除了 void test(),你可能会得到一个未定义的函数……它不是模棱两可,因为这两者总是被不同的上下文调用......
-
检查这个问题,它是类似的:stackoverflow.com/questions/7763802/…@LeonardoBernardini 如果你删除 void test(),你不会得到未定义的函数,因为编译器会创建一个新的测试对象但不会在任何地方分配它.
-
您可以使用
struct test t{};语法访问您的班级
标签: c++ ambiguity ambiguous-call