GNU C++定义对象时对象名称被括号包围且前面有个下划线是什么意思 5C

项目代码如下:

    int RunCmdImpl( TTask* task = NULL )
    {
        _UNUSED_ HydraTaskMemMgr<TTask> _(_local_task);
        _current_task = (NULL == task) ? _local_task : task;

        int ret = Init();
        if (ret != 0)
        {
            FATAL_LOG("Global Init failed");
            return ret;
        }

        // 如果定义了SetBaseEnv,则调用它设置基础运行环境
        if (SetBaseEnv) SetBaseEnv(*_current_task);
        GetControlParams(); // 先hold住参数,防止cgi执行超过1秒后获取不到
        RunModuleList(_module_store); // 按顺序执行注册的普通module列表
        RunModuleList(_post_module);  // 按顺序执行注册的后置module列表
        Print((*_current_task));
        HYDRA_LOG_SET_UIN(0); // clear uin
        return ret;
    }

其中
HydraTaskMemMgr为类模板,定义如下:

template<typename TTask>
struct HydraTaskMemMgr
{
    HydraTaskMemMgr(TTask*& task): _task(task) { _task = new TTask; }
    ~HydraTaskMemMgr() { delete _task; }
    TTask*& _task;
};

UNUSED为g++属性,定义如下:

__attribute__((__unused__))

请问下面定义类对象_local_task时为什么使用括号包围且前面加个下划线呢?
UNUSED HydraTaskMemMgr _(_local_task);

0

1个回答

 下划线也是合法的标识符构成的字符。比如 int i; int_i; int _i_; 这些都可以作为变量。
类似的, _foo() 也可以作为函数名,宏名,等等…… 也就是说,程序员可以随便命名一个变量、类或者宏,用它喜欢的名字。

那么为什么用下划线呢,主要是为了避免和用户正常定义的变量等重名。比如如果你定义current_task,万一用户不知道,他也定义了一个怎么办?
所以一些系统的标识,就用下划线等特殊字符开头。
0
boxmanstan
杀意已决 我也有这个疑问,提问者想问的是_UNUSED_ HydraTaskMemMgr<TTask> _(_local_task);中的_(),
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
go import 导入包名前加下划线 _
如: import ( _ &quot;github.com/mattn/go-sqlite3&quot; ) 原因:  在导入路径前加入下划线表示只执行该库的 init 函数而不对其它导出对象进行真正地导入。因为 Go 语言的数据库驱动都会在 init 函数中注册自己,所以我们只需要进行上述操作即可;否则的话,Go 语言的编译器会提示导入了包却没有使用的错误。 ...
JavaScript中方法或者变量名称前加下划线的是什么意思?
JavaScript中的方法或者变量名称前面有下划线,是做什么的? 加下划线不是js要求的,是程序员约定俗成的。 通常变量前加下划线表示“私有变量”。 函数名前加下划线表示“私有函数”。 为什么我加引号,因为“私有”这个词不是js的官方说法,js也根本没有“私有变量”这种东西,只是程序员之间模仿其他有私有变量的语言的一种约定俗成的说法。也就是“你懂的”。 只为代码维护方便,没特别意义。不是说加...
Go语言函数声明语法:函数名之前括号中的内容
func ( x DDDD) FOO(var type) ( ret type , err Errot) 也就是说 x DDDD是什么意思. func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... } 这意味着ServeHTTP不是一个独立的功能。函数名称前面的括号是Go定义这些函数将在...
C++创建类对象时(无参)后不加括号与加括号的区别
在不考虑用new动态创建对象的情况下,用最普通的类名 对象名(参数);的方法创建对象先贴上最正常最普通的代码#include&amp;lt;iostream&amp;gt; using namespace std; class C{ public: C(){ cout&amp;lt;&amp;lt;&quot;Hello C++\n&quot;; }; C(int m){ cout&amp;lt;&amp;...
使用IntelliJ IDEA 写Java代码时,有变量带着下划实线
-
函数名或关键字前加下划线
一般情况是标识该函数或关键字是自己内部使用的,与提供给外部的接口函数或关键字加以区分 这只是一种约定,实际你非要把这些函数或关键字提供给外部使用,语法上也美哟限制...
类名 对象名括号
#include using namespace std; class A { public:     A()     {         cout     } }; void main() {     A a();//此时编译器把a当初一个函数名,而没有当初一个对象名,所有不调用构造函数。     cin.get();     return; }
python 变量前的 单下划线 双下划线
1.单下划线变量前的单下划线表示表面上私有 但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。例子:class convertstrtoint: _name = "zhangkun333" __namedede = "zhangkun444"print convertstr
Python中变量名里面的下划线
1 变量名前后都有两个下划线(__X__),表示是系统级变量; 2 变量名前只有一个下划线(_X),表示该变量不是由from module import *导入进来的; 3 变量名前有两个下划线(__X),是类内部的变量; 4 变量名本是就是一个下划线(_),表示在交互模式下,最近一次表达式的返回值。   ...
objective-c 变量前加下划线"_"是什么意思?
objective-c 变量前加下划线&quot;_&quot;是什么意思?作者:王涛链接:http://www.zhihu.com/question/26605346/answer/33392620来源:知乎这是苹果的编程规范(也说不上规范,就是算是习惯吧),声明的property如果没有特意指定synthesize的话,那么Objective-C就会自动的给你声明一个_开头的实例变量。例如声明了一个叫param...
eclipse修改项目名称添加到tomcat server 时新项目名称后面小括号有原先项目名称
eclipse修改项目名称添加到tomcat server 时新项目名称后面小括号有原先项目名称 修改项目名称之后 添加tomcat 后显示原有名称的 --- (1)右键项目-Properties-Web - Project Settings 把Context     root 名称修改
eslint 的一些规则
parenthese:圆括号 curly brace:花括号 comma:逗号 semicolon:分号 函数体中没有花括号参数就不要有圆括号 对象中值必须要用单引号 定义但是没有被使用,一般是可以被删除的。有一种情况就是属性验证。PropTypes没有被使用,但是需要自己写属性验证,所以就会被用上。 ES6中属性名和用变量表示的属性值相同的时候,只需要写一次就行了。这叫做属性的简洁表
tomcat 部署项目后有括号
由于复制了一个项目,改了个名字,导入到eclipse,但是在部署的时候,发现括号里有之前复制的项目的名称,那么如何去除呢?跟着步骤来吧一.找到项目中的.project文件将name改为你自己的项目名称二 找到setting文件夹下的org.eclipse.wst.common.component文件更改方框里的三个地方为你自己的名称三 右键项目的properties属性更改为你自己的项目名称最后c...
Dart学习笔记(一、)——重要概念,常见类型和变量相关内容
一、dart语言中的重要概念 您可以放在变量中的所有内容都是一个对象,每个对象都是一个类的实例。 偶数,函数和null都是对象。 所有对象都从Object类继承. 尽管Dart是强类型的,但类型注释是可选的,因为Dart可以推断类型。如果明确不需要说明类型,使用dynamic 关键字。 dart支持泛型,例如List&amp;amp;lt;int&amp;amp;gt; Dart支持顶级函数(例如main(),程...
JavaScript里变量名前面加了大括号代表什么含义
在ES6的语法里面, 如果export的时候加了default , import的时候就不需要加{}; 如果没有加default就需要加{} 在ES5用require引入的语法, 第一和第三个,相当于把export的module的对象赋给局部变量 而第二个,就是 {log} 那个,相当于把export的对象里名字叫做log的那个属性的值拿出来,assign给本地的log这个变量 要获取更多Je...
linux驱动程序中的结构体成员前的点“.”是什么?
结构体赋值方法 在查看linux内核中的驱动程序时,结构体成员前总是有个点“.”,这是什么玩意,越看越懵了。 下面是网友总结的内容,引自:http://blog.chinaunix.net/uid-29033331-id-3811134.html 在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&amp;amp;R二版)中没有介绍过的。这种方式...
python中各种下划线的含义
_ _xxx :      在C++的类中,有公有、私有、保护的权限之分,但是在py中,语法上没有这样的关键字。但是,有方法可以实现类似的功能。在类的属性(变量)名前加两个下划线。比如self._ _ name,这就是实例的私有属性,在实例外部不能访问。_ _ XXX_ _: 在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,可以从外部...
python类中前面有双下划线的属性
python中 前面双下划线的属性,会保存到 _ClassName__variable 中。所以这里通过 “_LocalProxy__local” 设置的值,后面可以通过 self.__local 来获取。 In [66]: class A: ...: def __init__(self): ...: self._A__name = 'Abbie' ...
java NEW一个对象之后加入大括号
有两种情况:   1.初始化对象(匿名类): Class1 model = new Class1(){            { //new 对象后的大括号内可以对公开的成员变量,以及属性赋值.                Id=id,                Title=name,                Content=content,            }}; 举例...
eclipse项目名称后面括号里的名称和项目名称不一样
问题如图所示: 解决方案: 1:项目右键-属性(Properties)-Web Project Setting, 改名称 注意:这个名字将成为你在浏览器访问的路径 2:打开项目目录的.setting文件夹,随便一个文本编辑器打开org.eclipse.wst.common.component文件,修改内容:
类的实例化带括号与不带括号的区别
碰到了一个这样的问题,代码如下: >>> class Ar: #定义了一个Ar的类,名字随便取的 def __init__(self): self.value = 2 #初始化了一个value的属性,属性值为2 >>> t = Ar #实例化了一个t 的对象,(暂且这样说吧),这个不带括号 >>> print t.value Traceback (most rec
C语言允许以下划线开头的函数存在
首先,C++里关于下划线的问题是源于C语言,因为C++允许用extern “C”来修饰代码以C语言语法方式编译。然后说C语言里的下划线:C语言确实允许以下划线开头的函数存在,实际上你用一个下划线开头的函数名或者变量是没问题的,但有可能会发生命名冲突。凡是以两个或一个下划线开始,后面紧跟着一个大写字母的标识符,不管它出现在哪里,都是保留给编译程序或标准库函数使用的。此外,凡是以一个下划线开始,后面不管
关于golang 导入包的下划线和点的区别
在golang进行导入包时,我们有时会遇到包的前面需要加下划线或者点,一直不明白是什么意思,随即进行了搜索: 包前是下划线_:当导入一个包时,该包下的文件里所有init函数都会被执行,但是有时我们仅仅需要使用init函数而已并不希望把整个包导入(不使用包里的其他函数) 包前是点.: import(.“fmt”) 这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省
python 类 - 带括号(实例化)与不带括号(别名)赋值的区别
标题里的描述可能不够准确,以下面这个节点类做说明。 class ListNode: def __init__(self, x): self.val = x self.next = None 不带括号的赋值 对于: a=ListNode 相当于a指向了ListNode类,所以a与ListNode类相等。(这种描述可能不够准确,欢迎大神指正!)...
Nodejs 在互动模式下 下划线变量名
今天在测试代码时候发现,在nodejs 互动模式下 ,如果下划线作为对象名,会有意外事情发生&amp;gt; function Testfun(par1) {... return par1;... }undefined&amp;gt; Testfun.prototype.fun2 = function(variables) {... return variables;... }[Function]&amp;gt; a=n...
python中各种括号和数据定义
使用python中 初学者常会不知道如何定义序列,以及三种括号如何使用,如何表示矩阵: 1.小括号: 我们用小括号来表示一个tutle元组,这是一个不可更改的数据表示,只能读取 2.中括号: 我们用中括号来定义一个list列表,这里注意不能用list来表示我们常说的“数组”,数组的定义需要用到numpy,例如你定义一个变量: a=[[1,2,3],[4,5,6],[7,8,9]]
js 两个小括号 ()() 的用法
JavaScript 中,考查如下代码: (function() { alert(&quot;cftea&quot;); })();   其实这段代码的意思就是执行这个匿名函数,弹出提示框,内容为“cftea”。 可以把上述代码理解为: function foo() { alert(1); } foo();   其实相同的功能还有另外两种写法,我们一并列出来如下: ...
eclipse调试时,所有对象id相同
问题如下,所有对象后面的id一样,导致只有第一个可以查看内容,后面的则无法展开。如下图所示: 开始并不明白那个id是什么意思,以为是主键id,因为没有设置主键id所致。百度一下才明白这个id是分配给对象的唯一标识,id相同表明是同一个对象。 查看一下源代码: private Collection convertToUserTmp(List list) { List user
Android studio 新建项目的项目名不能带有下划线
出现下图所示错误是由于新建项目名中不能出现下划线,因为这样会导致生成头文件中的函数声明出错04-04 16:23:37.271 22174-22174/com.example.jlzt.myapplication_jiao E/art: No implementation found for int[] com.example.jlzt.myapplication_jiao.OpenCVHelpe...
C/C++:函数名前引用一个空的宏定义
在很多函数定义的地方都带有空的宏定义 比如:#define NS_CLASS //NS_CLASS的声明,仅仅只是一个定义为空的宏 int NS_CLASS timer_init(struct timer *t, timeout_func_t f, void *data) 查询了相关资料后,应该是多平台之间不同的编译器有不同的编译选项,只是为了以后其它平台有需要添加的或扩展的编译时选项而预...
c/c++变量前加*和加&的区别
1.* 变量前加*号,只有在变量为指针情况下才是合法的 当*用于定义时,是标明该变量为指针类型 除此以外,*的作用是取值。 C++中的指针可以理解为一个地址的值,*用于取值时就是取出改地址中存储的值 2.& &:一个是取地址符作用,另一个是引用 注意:&是取址符号。但&也可以有另一个用法,就是是其它变量的别名,如int &a=b;此时a就是b,b就是a,改变a的值
kotlin常用语法扫盲及开发注意点,勿错失(持续更新)
kotlin常用语法扫盲及开发注意点,勿错失 kotlin常用语法扫盲及开发注意点,勿错失 ::双冒号作用 map,list使用 只读map 可变MutableMap 遍布 遍历key 遍历value 遍历整个结构点 list 只读list 遍历 常用的数组、集合、序列等数据结构的扩展函数 filter() map() 泛型函数 常见内联函数 let函数 with函数 ru...
new一个类对象和使用类名创建一个对象有什么区别?
1.存储空间不同 new出来的在堆上  直接定义的在栈上  2.一个在堆,一个在栈  栈就是CXXX XX这种的,是在程序运行前就分配好的,不需自已释放  而堆,是运行时分配的,得自已释放  3.执行时间 1 直接定义的在栈上  效率高  2 在堆上创建对象容易引起内存碎片
使用eval转换json对象时为什么外边加括号?
由于 json 是以"{}"的方式来开始和结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性地将它转换成一种表达式。 加上圆括号的目的是迫使eval()函数在处理 js 代码时强制将括号内的表达式转换成对象,而不是作为语句来执行。
GO匿名变量下划线(_)的使用说明
package main import &quot;fmt&quot; //GetData set function to get data func GetData() (int, int) { return 10, 20 } func main() { //声明并赋值变量a和下划线(匿名变量) //匿名变量不占用命名空间,不会分配内存。 //匿名变量与匿名变量之间不会因为多次声明而无法使用。 a...
类或者结构体用无参构造函数创建对象时不需要带括号, 否则会当成函数声明
实例1: 类 #include &lt;iostream&gt; using namespace std; class Test { public: Test() { } Test(int) { } void fun() { } }; int main(void) { Test a(10); // 语句1 a....
python中函数的对象、嵌套、名称空间与作用域
函数对象函数是第一类对象,其含义是函数可以被当做数据处理。1.引用def func():    print('from func')f = funcprint(f)2.当做一个参数传给一个函数def func():    print('from func')def foo(m):    print(m)    m()foo(func)3.可以当做函数的返回值def func():    print...
【JAVA语法】持有对象--Java中List的用法
写在前面:    我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。                                                                                                  ...
Python 函数两括号()() ()(X)的语法含义
在写吴恩达《深度学习》课程编程题时,见到这样的用法: def model(input_shape): # Define the input placeholder as a tensor with shape input_shape. Think of this as your input image! X_input = Input(input_shape) # Z...
在vue中使用axios提交post请求出现大括号和冒号的坑
先把出现问题的地方贴上来,这是我在vue项目中的代码,在这个注册功能中,会向后台发送数据,这里不能直接将postData传到后台,否则会报错,所以这个地方使用了JSON.stringify()对数据进行序列化。后台接收到数据后我尝试打印出来,结果让我非常难受。打印的结果如下所示,,将接收到的数据打印出来后,发现居然在外面多了一个大括号,这都什么玩意。而且前端控制台接收到的数据是这样的数据的后面多了...