标签: scope-resolution

prepended double colon"::"是什么意思?

我在类中找到了这行代码,我必须修改它:

::Configuration * tmpCo = m_configurationDB;//pointer to current db
Run Code Online (Sandbox Code Playgroud)

而且我不知道究竟是什么意思是双重冒号前面的类名.没有它我会读:声明tmpCo作为指向类的对象的指针Configuration...但前面的双冒号混淆了我.

我还发现:

typedef ::config::set ConfigSet;
Run Code Online (Sandbox Code Playgroud)

c++ syntax namespaces scope-resolution global-namespace

383
推荐指数
8
解决办法
19万
查看次数

C++语法"A :: B:A {};"是什么意思

C++语法struct A::B:A {};是什么意思?C++标准中描述的名称定义(或访问)在哪里?

#include <iostream>

struct B;

struct A {
    struct B;
};

struct A::B:A {
};

int main() {
    A::B::A::B b;
    std::cout<<"Sizeof A::B::A::B is " << sizeof(A::B::A::B)<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ syntax struct scope-resolution

64
推荐指数
2
解决办法
8090
查看次数

vim找不到并替换明显存在的简单短语

我有一个简单的vim问题,谷歌没有设法帮助我.任何想法都表示赞赏.

我执行以下搜索并替换:

:s/numnodes/numnodes1/g
Run Code Online (Sandbox Code Playgroud)

在包含以下文本的文件中:

numprocs=0  
numnodes=0
Run Code Online (Sandbox Code Playgroud)

我明白了

E486: Pattern not found
Run Code Online (Sandbox Code Playgroud)

绿色方块的位置表明我开始打字的位置明显高于模式.我试图寻找其他不涉及正则表达式的短语,这些短语也存在,但也失败了.简单/ numnodes按预期突出显示匹配项.有谁知道vim可能有什么问题?

vim replace scope-resolution

63
推荐指数
2
解决办法
3万
查看次数

为什么C++需要范围解析运算符?

(我知道范围解析运算符的作用,以及如何以及何时使用它.)

为什么C++有::运算符,而不是.为此目的使用运算符?Java没有单独的运算符,并且工作正常.C++和Java之间是否有一些区别,这意味着C++需要一个单独的运算符才能进行解析?

我唯一的猜测是::出于优先原因需要,但我不能认为为什么它需要具有比例如更高的优先级..我能想到的唯一情况就是如此

a.b::c;
Run Code Online (Sandbox Code Playgroud)

将被解析为

a.(b::c);
Run Code Online (Sandbox Code Playgroud)

,但我无法想到任何情况下,这样的语法无论如何都是合法的.

也许这只是"他们做不同的事情,所以他们可能看起来不同"的情况.但这并不能解释为什么::优先级高于..

c++ language-design operators scope-resolution

38
推荐指数
4
解决办法
4万
查看次数

在C++中,阴影变量名称的范围分辨率("优先顺序")是多少?

在C++中,阴影变量名称的范围分辨率("优先顺序")是多少?我似乎无法在网上找到简明的答案.

例如:

#include <iostream>

int shadowed = 1;

struct Foo
{
    Foo() : shadowed(2) {}

    void bar(int shadowed = 3)
    {
        std::cout << shadowed << std::endl;
            // What does this output?

        {
            int shadowed = 4;
            std::cout << shadowed << std::endl;
                // What does this output?
        }
    }

    int shadowed;
};


int main()
{
    Foo().bar();
}
Run Code Online (Sandbox Code Playgroud)

我想不出变量可能会发生冲突的任何其他范围.如果我错过了,请告诉我.

shadowbar成员函数内部时,所有四个变量的优先级顺序是多少?

c++ variables scope scope-resolution shadowing

16
推荐指数
2
解决办法
2611
查看次数

C++ 0x decltype和范围解析运算符

有了像Foo这样的课程:

struct Foo { static const int i = 9; };
Run Code Online (Sandbox Code Playgroud)

我发现GCC 4.5将拒绝以下内容

Foo f;
int x = decltype(f)::i;
Run Code Online (Sandbox Code Playgroud)

如果我使用中间typedef,它将起作用,例如:

typedef decltype(f) ftype;
int x = ftype::i;
Run Code Online (Sandbox Code Playgroud)

但我更喜欢保持命名空间的清洁.我认为优先权可能是一个问题,所以我也试过括号,但没有运气.它是不可能的,或者是否有一段语法可以帮助我?

c++ typeof scope-resolution decltype c++11

14
推荐指数
1
解决办法
932
查看次数

"::"在":: tolower"中的含义是什么?

我见过这样的代码:

std::string str = "wHatEver";
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)

我有一个问题:::在tolower之前意味着什么?

std::tolower没有用,但::tolower工作正常

c++ string stl std scope-resolution

12
推荐指数
2
解决办法
1213
查看次数

this-> field和Class :: field之间的区别?

我想知道C++中的一些东西.

承认以下代码:

int bar;
class Foo
{
public:
    Foo();
private:
    int bar;
};
Run Code Online (Sandbox Code Playgroud)

在我班上,this->bar和之间有什么区别Foo::bar?是否存在一个无效的情况?

c++ pointers class this scope-resolution

11
推荐指数
1
解决办法
355
查看次数

模板方法和默认模板参数

我的问题可以通过以下代码恢复:

template <typename T> struct C2;

template <typename T> 
struct C1
{
  template <typename Type,
        template <typename Ti> class Container = C2>
  void m() {}
};


template <typename T> 
struct C2
{
  template <typename Type = int,
        template <typename Ti> class Container = C2> // <-- Here is the problem!
  void m() {}

};
Run Code Online (Sandbox Code Playgroud)

gnu编译器版本4.8.1失败,并显示以下消息:

test-temp.C:16:47: error: invalid use of type ‘C2<T>’ as a default value for a template template-parameter
      template <typename Ti> class Container = C2> 
Run Code Online (Sandbox Code Playgroud)

它指的是方法C2 :: m的默认模板参数C2. …

c++ templates scope-resolution default-arguments c++11

9
推荐指数
1
解决办法
580
查看次数

在C++中使用std名称空间的完全限定名称

如果C++中的名称不是完全限定的,例如std::cout,它可能会导致无意的错误,例如https://en.cppreference.com/w/cpp/language/qualified_lookup中提到的.但正如我所注意到的那样,使用名称::std空间的完全限定名称eq ::std::cout是非常罕见的.

是否有任何理由::std不使用名称空间的完全限定名称?

那么为自己创建的命名空间使用完全限定名称呢?这是好主意吗?

c++ naming namespaces scope-resolution name-lookup

9
推荐指数
1
解决办法
558
查看次数