草庐IT

限定词

全部标签

c++ - 使 std::atomic<> 对象具有限定符 - volatile 是否有意义?

使用限定符-volatile来创建原子对象是否有意义?使用那个:volatilestd::atomici(1);代替:std::atomici(1); 最佳答案 不,让std::atomic也具有易变性是绝对没有意义的,因为在std::atomic内部,代码将处理以下可能性变量可能随时更改,并且可能需要“告知”其他处理器它已更改(volatile未涵盖“告知”其他处理器)。你真正需要volatile的唯一时间是你有一个指向你的代码控制的硬件的指针-例如读取定时器中的计数器,或者哪个帧缓冲区是事件的现在,或者告诉网卡从哪里读取下一个要

c++ - 为什么 const 限定符不能作用于 const 对象的指针成员?

我知道这已经被问了很多,但我能找到的唯一答案是当使用(int*)或类似的东西实际上抛弃了const-ness时。当不涉及强制转换时,为什么const限定符不能作用于const对象上的指针类型成员变量?#includeclassbar{public:voiddoit(){std::coutdoit()\n";mybar1->doit();//Thiscallsbar::doit()insteadofbar::doit()conststd::cout上面的代码产生以下输出(在gcc4.5.2和vc100中测试):foo::doit()constcallingmybar1->doit()ba

C++类型限定符问题

作为我的计算机软件开发学位的一部分,我的一个实验室包括创建一个计算器类模板和一个分数类。问题出在我的分数类上。我现在的任务是重载加号运算符以允许将两个分数相加。分数.cpp:#include"Fraction.h"constFractionFraction::operator+(constFraction&rhs)const{returnFraction(_num*rhs.GetDen()+(rhs.GetNum()*_den),_den*rhs.GetDen());}分数.h#pragmaonceclassFraction{public:Fraction(constint&num,c

c++ - std 构造函数的调用是否需要限定?

std构造函数的调用是否需要使用std::进行限定?classwhatever:publicstd::runtime_error{public:explicitwhatever(conststd::string&what):runtime_error(what){}};//^doIneedstd::here?它可以在我的编译器上运行而无需限定,但我不确定这种行为是否是标准的。 最佳答案 不,你不知道。在whatever类的范围内查找初始化器列表中的名称。此类作用域包括在基类中声明的名称,并且基类的名称(runtime_error)被

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

如果C++中的名称不是完全限定的,例如std::cout,它可能导致意外错误,例如https://en.cppreference.com/w/cpp/language/qualified_lookup中提到的.但是为::std命名空间使用完全限定的名称,e.q.::std::cout,正如我所注意到的,非常罕见。::std命名空间的完全限定名称未被使用是否有任何原因?那么如何为自己创建的命名空间使用完全限定名称呢?这是个好主意吗? 最佳答案 你是完全正确的,从某种意义上说,如果有一个命名空间yyyy和一个类yyyy,那么yyyy::

c++ - namespace 、类和自由函数——什么时候需要完全限定的名称

在我下面的示例中,为什么我必须完全限定cpp中的自由函数的名称以避免链接器错误,为什么它适用于没有的类函数?你能解释一下区别吗?ctest.h:namespaceTest{intFreeFunction();classCTest{public:CTest();~CTest();};}ctest.cpp:#include"ctest.h"usingnamespaceTest;//intFreeFunction()->undefinedreferenceerrorintTest::FreeFunction()->worksjustfine{return0;}CTest::CTest()->

c++ - 对象具有与成员函数不兼容的类型限定符

我的类Game有一个成员EntityManagerentityManager_。EntityManager类有一个私有(private)成员Playerplayer_和返回的公共(public)getter函数Player&EntityManager::getPlayer()player_.Player类具有例如函数voidstartMoving()和sf::Vector2fgetPosition()const。现在,我可以毫无问题地从我的Game类中调用entityManager_.getPlayer().startMoving();,但是当我尝试使用以下代码时获取玩家的位置:sf:

c++ - 在 C++ 中使用::限定的命名空间

如果C++中的命名空间用::限定是什么意思?例如::testing::Test。 最佳答案 ::是范围解析运算符。它始终表示“在全局namespace中搜索右侧的符号”。例如:namespacetesting{inta=1;}namespacefoo{namespacetesting{inta=2;}intb=::testing::a;//bhasthevalue1intc=testing::a;//chasthevalue2} 关于c++-在C++中使用::限定的命名空间,我们在Sta

c++ - 具有类型 'const CompareVPtrs' 的表达式将丢失一些 const-volatile 限定符以便调用

我正在用C++实现十五个益智控制台游戏,引发了以下错误Error4errorC3848:expressionhavingtype'constCompareVPtrs'wouldlosesomeconst-volatilequalifiersinordertocall'boolCompareVPtrs::operator()(Vertex*,Vertex*)'c:\programfiles\microsoftvisualstudio11.0\vc\include\xfunctional3241puzzle15这是我的结构structCompareVPtrs:publicbinary_fu

c++ - 通过整数限定符打印 char

我正在尝试执行以下程序。#‎include‬"stdio.h"#include"string.h"voidmain(){charc='\08';printf("%d",c);}我得到的输出为56。但是对于8以外的任何数字,输出都是数字本身,但是对于8,答案是56。谁能解释一下? 最佳答案 以\0开头的字符代表Octalnumber,是8进制数字系统,使用数字0到7。所以\08是octal的无效表示number因为8∉[0,7],因此您将获得实现定义的行为。可能你的编译器识别了一个MultibyteCharacter'\08'作为'\