我知道在 C++ 中,您使用->
or::
代替.
C# 等语言来访问对象的值,例如button->Text
or System::String^
,但我不知道什么时候应该使用->
or ::
,这非常令人沮丧,因为它会导致我出现许多编译器错误。如果您能提供帮助,我将不胜感激。谢谢 :)
问问题
180 次
5 回答
10
->
是当您访问指针变量的成员时。EG:myclass *m = new myclass(); m->myfunc();
调用myfunc()
指向 的指针myclass
。::
是作用域运算符。这是为了显示某些东西在什么范围内。所以如果myclass
在命名空间中,foo
那么你会写foo::myclass mc;
于 2013-10-30T16:00:52.060 回答
4
->
如果您有指向某个对象的指针,这只是取消引用该指针并访问其属性的快捷方式。pointerToObject->member
是相同的(*pointerToObject).member
::
用于从某个范围访问内容 - 它仅适用于命名空间和类/结构范围。namespace MyNamespace { typedef int MyInt; } MyNamespace::MyInt variable;
于 2013-10-30T16:05:35.233 回答
4
与您的问题所述相反,您确实.
在 C++ 中使用。相当多。
.
(与访问成员和方法的非指针一起使用)
std::string hello = "Hello";
if (hello.length() > 3) { ... }
->
(与访问成员和方法的指针一起使用)
MyClass *myObject = new MyClass;
if (myObject->property)
myObject->method();
::
(范围分辨率)
void MyClass::method() { ... } //Define method outside of class body
MyClass::static_property; //access static properties / methods
::
也用于命名空间解析(参见第一个示例,std::string
,其中string
是在命名空间中std
)。
于 2013-10-30T16:10:11.223 回答
3
我尝试展示::
,.
和的一些用法示例->
。我希望它有帮助:
int g;
namespace test
{
struct Test
{
int x;
static void func();
};
void Test:: func() {
int g = ::g;
}
}
int main() {
test::Test v;
test::Test *p = &v;
v.x = 1;
v.func();
p->x = 2;
p->func();
test::Test::func();
}
于 2013-10-30T16:07:47.107 回答
2
当左操作数是指针时应用运算符 ->。考虑例如
struct A
{
int a, b;
A( int a, int b ) : a( a ), b( this->a * b ) {}
};
运算符 :: 引用右操作数所属的类或名称空间。例如
int a;
strunt A
{
int a;
A( int a ) { A::a = a + ::a; }
};
使用句点,然后左操作数是对象的左值。例如
struct A
{
int x;
int y;
};
A *a = new A;
a->x = 10;
( *a ).y = 20;
于 2013-10-30T16:12:36.887 回答