问题标签 [scope-resolution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 朋友、运算符关键字和范围解析
不编译,因为 m_eState 在最后一个定义中不可访问。原因是友元声明出现在 Ctribool 命名空间中,因此声明了不同的函数。所以我尝试如下使用范围解析运算符。
和
但这也不起作用,因为不知何故 Ctribool 未被识别为有效类型。我怀疑在这种情况下前向声明是不够的。有什么解决办法吗?
c++ - 模板方法和默认模板参数
我的问题可以通过以下代码恢复:
gnu 编译器,版本 4.8.1 失败并显示以下消息:
它引用方法 C2::m 的默认模板参数 C2。
显然(我认为),编译器将C2<T>
其视为默认参数而不是C2
(没有<T>
)。因此,当它找到指令时,它会失败,因为类型C2<T>
与Container
.
然而,clang++,只是对于完全相同的代码,编译得很好!
我的问题:
- 哪个编译器有真相?
- 是否有其他方法可以与当前版本的 gnu 编译器表达相同的含义?
提前致谢
莱安德罗
c++ - 为什么 C++ 不允许在 :: 之后使用 const?
伙计们,
问题陈述 - C++ 是否允许(静态)const 限制在类范围内,所以我可以摆脱污染整个命名空间的#defines?
我的观察结果是否定的(在以下不同的示例中),我想找出原因以及最好的选择是什么。VS 生成错误 C2589: 'const' : '::' 右侧的非法令牌
例 1
// 啊
A类{
};
//b.cpp
包括“啊”</h1>
… B() { uint32_t arr[A::myConst]; // C2589!const : '::' 右侧的非法标记 }
例 2
// 啊
A类 { ... .. enum blah { ... myConst = 1234, .. }; };
//b.cpp
包括“啊”</h1>
... B() { uint32_t arr[A::myConst]; // C2589!const : '::' 右侧的非法标记 }
c++ - 用于访问基础子对象的点或箭头运算符与范围解析运算符
C++
给定一个基类Base
和一个派生类Derived
,由 的构造函数构造的第一件事Derived
就是Base
子对象。由于它被称为子对象,我假设它可以像任何其他成员对象一样通过在Derived
对象上使用点运算符从客户端代码访问。我还假设它可以Derived
通过this->Base
. 完全由已初始化的对象名称后跟分号组成的语句应该可以编译,但也没有效果。按照这个逻辑,给定一个Derived
object myderived
,我尝试了:myderived.Base;
在客户端代码和this->Base;
inDerived
的实现中,并且两个语句都没有编译。
为什么?我知道Base
,它本身是Base
类的名称,而不是Base
对象的名称。但我认为(客户端代码)或(实现代码)前缀Base
限定是指基本子对象,因为没有任何前缀限定,是在构造函数初始化程序中引用子对象的方式。请参阅下面的代码,该代码(除了注释掉的代码)适用于 VC12 和 g++ 4.8。extends and的定义声明了一个数据成员,所以我的对象应该包含两个myderived.
this->
Base
Base
Derived
Derived
Base
Derived
Base
membase
Derived
Base
对象。假设成功编译不是任何编译器标准不一致的结果,控制台输出(在注释中)显示两个不同对象的int
成员的不同值,这意味着 in的 ctor 初始化程序是指继承的子对象,而引用声明的数据成员对象。In的 ctor 初始化器,专门指继承的子对象,而不仅仅是任何对象或类。n
Base
Derived
Base
Base
membase
Derived
Base
Base
Base
同样,不应该
myderived.Base;
或this->Base;
唯一地引用继承的Base
子对象并编译?Base
inmyderived.Base
或this->Base
引用Base
子对象或Base
类或任何东西?一般来说,继承的基础子对象是否被视为派生类的数据成员?
从 的角度来看
Derived
,是否只引用了构造函数初始化器Base
上下文中的继承子对象,而只引用了 ctor 初始化器之外的类?Derived
Base
Derived
如何
Base
通过对象访问继承的子对象,如在的实现代码和客户端代码Derived
中如何表达“对象的继承Base
子Derived
对象” ?Derived
范围解析运算符 in 的使用
myderived.Base::foo()
,其中foo()
的方法是Base
,编译。这是否意味着Base
是 的数据成员myderived
,因为它由myderived
点运算符限定?如果是这样,那是Base
类Base
还是Base
子对象?但
myderived.Base.foo()
不编译。对象成员的 AFAIK 访问在客户端代码中由对象名称和点运算符限定。由范围解析运算符而不是对象名称和点运算符限定的两种事物是(a)对属于命名空间的任何事物的外部访问和(b)静态数据成员的名称和成员函数的名称在其类定义之外定义的定义,在这种情况下Base
,在 之前的::
指的是Base
类,而不是任何Base
实例。这是否意味着Base
inmyderived.Base
是命名空间或引用类?如果是这样,那么它是命名空间还是引用该类取决于它是否附加了一个
::
后跟的成员Base
?如果#7 的答案是肯定的,那为什么?这似乎与以下逻辑不协调:命名空间对一个变量的封闭本身并不使命名空间能够封闭或构造该变量类型的其他实例。命名空间只拥有该类型的一个实例——它包含的变量。作为类的一部分的成员也是如此,例如静态数据成员。该类只拥有该类型的一个实例——它包含的静态数据成员。相反,一个类的同名非静态数据成员与该类的实例一样多。
给定方法
h()
和对象,在 VC12 和 g++ 4.8 中编译。此外,g++ 4.8 可以在该语句中采用任意数量的额外s,例如. 这样的说法似乎暗示是. 但 VC12 给. 但是给定object ,VC12 编译得很好,这也意味着 VC12 可以将一个类视为其自身的成员。但这与其无法编译先前的声明相矛盾。此外,VC12 无法编译具有任意数量额外内容的任何版本Base
Derived
myderived
myderived.Base::h();
Base::
myderived.Base::Base::h();
Base
Base
error C3083: '{ctor}': the symbol to the left of a '::' must be a type
Base
mybase
mybase.Base::h();
mybase.Base::h();
Base::
s(例如mybase.Base::Base::h()
)的任何版本,但 g++ 可以。哪个编译器是正确的,如果有的话?无论如何,这是否意味着命名空间或类可以包含自身?给定一个全局
int
变量x
,该语句::::x;
(带有两个范围解析运算符)不会在任一编译器中编译,所以我假设全局范围不包含全局范围。
c++ - 范围解析到模板类中的静态函数或指针
我目前正在处理其他人编写的一些代码,我不确定他们的方法的效率。他们有一个模板类,它使用范围解析来访问类的成员,而不是拥有一个指向模板化类的指针并以这种方式访问它。例如:
我个人觉得它使模板类难以理解,但我的主要查询领域是性能。哪个更有效率;使用范围解析,或拥有私有成员变量A::T* p_blah
并使用?调用B
函数p_blah->DoSomething()
javascript - Javascript 等效于 PHP 的 ::(范围解析运算符)
在 PHP 中,您可以执行以下操作:
然后,当然,您可以在实例化类之后调用该方法,如下所示:
但是您也可以选择将该方法作为独立函数调用,而无需实例化类(但您必须注意该函数中的依赖项),如下所示:
我相信这是为 C++ 借来的东西...它被称为范围解析运算符(PHP 代码中的 Paamayim Nekudotaim...)
http://en.wikipedia.org/wiki/Scope_resolution_operator#PHP
http://www.php .net/manual/en/language.oop5.paamayim-nekudotayim.php
你会如何在 JavaScript 中做这样的事情?这似乎是不可能的。也许我以错误的方式接近这个,我应该透露我想要实现的目标......
我只是有一个函数,它是这样的:
我很高兴它是一个功能。但我想实现一个“resetContactForm()”,但希望以某种方式将它附加到 submitConatctForm 函数。
我知道我可能会这样做:
我会这样回答我自己的问题......
但是,除了我不喜欢这种语法并想避免它之外,还有一个事实是上面的结构不能用作类定义,它与 PHP 中的不一样......所以回到最初的问题:有没有办法让 JavaScript 结构同时用作类定义和独立函数的集合?
php - php中范围解析运算符之前的&符号
你好我来这里问你一个关于php的问题。我在网上搜索了很多次以获得解决方案,但我还没有找到它。我见过这样的代码:
我只需要在Mail::factory
.
c++ - C++ 枚举:分配变量还是使用范围解析?
我正在使用 Visual Studio 2012 编译此 C++ 代码。我注意到我可以在没有范围解析运算符 (::) 的情况下使用枚举值。
这是我的代码在 int main() 之外的重要部分:
然后在 int main() 我使用以下内容:
为什么这些函数调用有效?print() 函数接受一个 SortMethod 参数。所以我想我需要做以下事情:
但事实证明,我可以简单地在参数列表中使用“BY_NAME”。这是特定于编译器的吗?
c++ - How to use overloaded function operator (operator()) of another class?
This is the class that contains the overloaded function operator:
How can I use this? This class is specified in a header that contains a class specification for a heap ADT as well. I am trying to use it in one of my heap ADT's member functions, and am not sure of the syntax. I assumed it would be as follows:
But the compiler gives me an error: expected unqualified-id before '(' token
It DOES work like this:
But there has to be a way to use it in another way that is less cluttered. If I wanted it to look like this, I wouldn't have overloaded an operator in the first place and would have just made it a typical function.
I've tried doing some research on this question before asking here, but it's a little hard to find an answer to something this specific. My searches keep leading me to different topics.
c++ - :: 运算符能否出现在与限定名称查找中的范围解析不同的上下文中?
作为用于限定名称查找目的的已知范围解析运算符。但是返回的值是::
多少?据我了解,它是后缀一元运算符。考虑以下:
你能解释一下这种行为吗?