【发布时间】:2019-07-01 12:26:34
【问题描述】:
我正在尝试理解here 列出的 C++ 程序。我对第 86-87 行第二次使用双冒号感到困惑:
using TransformType = itk::AffineTransform< ScalarType, Dimension >;
TransformType::Pointer transform = TransformType::New();
看起来TransformType 是一个用户定义的类型。在New() 之前如何使用它?听说双冒号要跟在命名空间后面,但是这里TransformType是一个类型(即类)而不是命名空间。有人可以澄清一下---应该在 C++ 中的命名空间之后始终使用双冒号吗?是否可以使用点(如在 Java 中)?
【问题讨论】:
-
如果一个类
TransformType有一个静态成员函数New(),你可以使用TransformType::New()调用它。::是作用域解析运算符,它不限于命名空间。见:en.cppreference.com/w/cpp/language/qualified_lookup -
操作符
::是scoping操作符,用来表示作用域。所以TransformType::New()意味着(基本上)“在TransformType的范围内调用函数New”。 -
@Someprogrammerdude 谢谢。在那种情况下,是否可以像在 Java 中一样使用“TransformType.New()”?我的意思是,使用点而不是两列?
-
不,因为
TransformType是一个类型名称。您不能将其用作对象实例(因为它不是)。 -
Java 和 C++ 使用不同的语法和语义。它们是外观相似的语言,但非常不同。它们都是优秀、成功的语言,但章程和原则略有不同。