这个问题可能与C ++如何在编译时处理指针有关,但是在了解泛型时就出现了这个问题。我有以下代码(在Visual Studio中没有给我任何错误):
class myClass { int x; };
template<typename T>
int myFunc(T obj)
{
return obj.someMethod();
}
int main(int argc, char *argv[])
{
myClass obj = myClass();
myFunc(obj);
}
显然,“myClass”没有someMethod(),但Visual Studio不会给我任何错误。但是,当我将myFunc更改为:
template<typename T>
int myFunc(T *obj)
{
return obj->someMethod();
}
我确实收到错误,我认为这是因为编译器检查myClass没有someMethod()。为什么我的第一个代码块没有出现同样的错误?
答案 0 :(得分:2)
使用g ++和clang ++,使用指针传递值并通过引用传递失败 clang ++是版本3.6.1 g ++是版本4.9.2
如果您可以在visual studio上重现这一点,请在其编译器上提交错误。