首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS编码建议

一、ViewController代码结构 在函数分组和protocol/delegate实现中使用#pragma mark -来分类方法,遵循以下结构: // 生命周期 #pragma mark - Lifecycle...UITableViewDelegate UI控件依次类推 三、编码 1、字面编码 NSString, NSDictionary, NSArray, 和 NSNumber可以在创建不可变值时使用,注意不要nil...和Getter,可以通过直接用点语法访问Setter和Getter方法。...但是在访问空指针和野指针时有差别——空指针会挂在*解引用,野指针会挂在.访问内存。...五、常量 共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以根据const修饰的位置设定能否修改,在编译阶段会执行类型检查 推荐使用const来定义常量,如下 NSString *const

33510

C++C++ 引用详解 ② ( 引用的意义 | 引用本质分析 | 引用的常量特征 | 引用所占内存空间与指针相同 | 引用在 C++ 编译器实现 | 引用编译时会自动翻译为常量指针 )

, 不需要使用指针和取地址符 , 其 可读性 , 可维护性 大大提升 ; 指针示例 : // 交换 a 和 b 的值 // C 语言中可以使用该方法 void swap2(int* a, int* b...) { int c = 0; c = *a; *a = *b; *b = c; } 引用示例 : // 交换 a 和 b 的值 // C++ 中推荐的方法 void swap3(int& a,...---- 1、C++ 引用是常量指针 综合上述引用的特征 : 引用具有常量的特征 , 是一个常量 ; 引用和变量都是相同的内存空间的别名 , 其地址都指向内存空间 ; 引用本身也占用内存空间 , 占用大小与指针相同...; 综合上面的三种特点 , C++ 语言编译器 中 , 引用的本质是 : 类型* const 指针名称; 指针 ; 引用在 C++ 语言内部是 常量指针 , 下面 C++ 语言的 " 引用 " 引用类型...& 引用名称 等同于 下面的 C 语言的 " 常量指针 " 指针类型* const 指针名称 C++ 语言中的 引用 , 其在 编译器中的实现 就是 " 常量指针 " , 因此 引用 占用的内存空间与

25220
您找到你想要的搜索结果了吗?
是的
没有找到

Java 转 C++ 知识点

常量与常函数 5. 值、引用 6. 友元的意义 7. 左移运算符重载 8. 析构函数 9. 带指针的类 10. 转型 11. 多态 12. 右值引用与move 13....分为data段(已初始化)和bss段(未初始化) 5)文字常量区:程序结束后由系统释放,存放常量字符串 6)text 程序代码区:存放函数体的二进制代码 与Java相比: c++的heap需要程序员手动分配和释放...C++的堆和栈都可以用于存放对象,以哪种方式管理对象取决于开发人员的代码(比如栈上分配) 定义变量和数组时,Java默认初始化,C++不初始化; 在类中,方法中定义变量、动态数组时,Java默认初始化...const是编译时检查,运行时其实是可以修改的(const_cast) const在号前面,则值为常量,在后面,则指针常量。 5....函数指针与回调机制 在Java中,回调的实现一般是通过传递接口参数,然后调用接口的方法实现方法回调。 在C/C++中,由于函数指针的存在,可以将函数作为参数传递,这就实现了比较特别的回调机制。

81420

Effective Modern C++翻译(2)-条款1:明白模板类型推导

这一章提供了一些每一个C++开发者都需要了解的关于类型推导的基本信息,它解释了模板类型推导是如何工作的,auto是如何在此基础上建立自己的规则的,decltype是如何按自己的独立的规则工作的,它甚至解释了你如何强迫编译器来使类型推导的结果可见...+里是不允许的,避免他们的唯一方法在类型推导时忽略表达式的引用性(reference-ness)。...第三种情况:ParamType的类型既不是指针也不是引用 当ParamType的类型既不是指针也不是引用的时候,我们是按照值的方式进行处理的 template void f(...但是如果数组通过值的方式传递给一个模板的时候,会发生什么呢?...因为数组参数的声明被按照指针的声明而对待,通过按值的方式传递给一个模板参数的数组将被推导为一个指针类型,这意味着在下面这个模板函数f的调用中,参数T的类型被推导为const char* f(name);

752100

C++从入门到精通——引用(&)

C++的引用 前言 C++的引用是别名,它为已存在的对象提供了另一个名称。一旦引用被初始化指向一个对象,它就不能再指向其他对象。引用必须在声明时初始化,并且必须初始化为有效的对象或字面量。...在main函数中,将变量x传递给print函数后,print函数无法修改x的值。这样做可以确保函数不会意外地修改传递给它的参数。...权限的方法 void TestConstRef() { const int a = 10; //int& ra = a; // 该语句编译时会出错,a为常量 const int...五、值、引用效率比较 以值作为参数或者返回值类型,在参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的...; } int main() { //TestRefAndValue(); TestReturnByRefOrValue(); return 0; } 通过上述代码的比较,发现值和指针在作为参以及返回值类型上效率相差很大

6810

有一次小明数据给我,把我弄哭了

某天小明处理的一些数据需要传给我这边处理,于是小明在我们的传输媒介上面新增了一个 Map 用于保存这些数据,数据结构如下: public class Record { private final Map...extData.put(key, data); } public String getData(String key) { return extData.get(key); } } 在小明猛虎的一顿操作之下...于是,小明看出了我心里的憋屈,在项目的常量中将相关的 Key 写成了常量的形式: public class Constants { public static final String KEY_1...而且有些人就懒得问了,直接凭着自己的理解,一个自己“参悟”得到的 Key 来获取 extData,这时很可能就跟小明给的不一样,导致数据获取不了。...这个 Map 的 Key 定义了一个枚举,将 Key 定义到这个枚举上面: public enum KeyEnum { KEY_1, KEY_2, KEY_3 } 接着在 getter、setter

33130

【愚公系列】软考中级-软件设计师 012-程序设计语言基础知识(概述)

指针指针是一种特殊的数据类型,它存储了一个变量的内存地址。指针可以用于访问和操作其他变量的值。枚举类型:枚举类型是一种用户自定义的数据类型,它包含了一组已命名的常量值。...控制结构(Control Structures):用于控制程序的执行流程的语句和结构,包括条件语句(if-else、switch)、循环语句(for、while)、跳转语句(break、continue...除了以上的基本成分,不同的程序设计语言可能还具有其他的运算成分,指针(Pointers)、模块(Modules)、接口(Interfaces)等。...值调用(Call by Value)是指在函数调用时,将实际参数的值复制一份传递给形式参数,函数内部对形式参数的修改不会影响到实际参数的值。换句话说,函数内部的操作只是对形式参数的一份拷贝进行的。...址调用(Call by Reference)是指在函数调用时,将实际参数的地址传递给形式参数,函数内部对形式参数的修改会影响到实际参数的值。换句话说,函数内部的操作直接对实际参数进行修改。

11711

Objective-C 中 9 种避免使用 Xcode 预处理器宏的方法

除非您的自定义宏依赖于 Xcode 预处理器宏(__LINE__),否则请将其重写为一个独立函数。(即便依赖于 Xcode 预处理宏,也要让您的宏调用另一个函数,并尽可能多地转移到该函数中)。...C 语言和 C++ 的有一些相似的地方。...只不过,这次我们定义的是一个常量字符串,它实际上是一个对象,在 Objective-C 中表示为指针。因此,我们要定义一个常量指针。...常量字符串通常在多个文件中共享,因此这里介绍如何在 .h 文件中声明常量: extern NSString *const JMRResponseSuccess; 因此,.m 文件中的定义是 NSString...如果你的代码中存在多个特定于平台的子类层次结构,你可能会发现使用桥接模式的机会。 避免使用 Xcode 预处理器宏! 请再次在终端中执行此命令,以查找代码中可能违规的 Xcode 预处理器宏。

8110

我的C++奇迹之旅:值和引用的本质效率与性能比较

指针不同,指针可以改变指向的对象:一级指针可以改变指向,p可以从指向a改为指向其他变量,二级指针可以改变一级指针指向的地址,pp可以改变p指向的地址 而引用更像一个const指针:定义后不能改变指向的对象...**a_copy**作为参数传递给TestFunc1。TestFunc1内部操作的实际上是a_copy,对a_copy的修改不会影响实参a。TestFunc1返回时,临时对象a_copy会被销毁。...TestFunc1以值方式传递结构体A作为参数。这会导致每次调用都会对A进行值拷贝,对于一个包含10000个int成员的大结构体,拷贝开销很大。...这是C++中函数返回引用需要特别注意的地方。...声明语法: 引用使用&符号声明,int& ref = x; 指针使用*符号声明,int* ptr = &x; 操作方式: 引用直接访问和操作其引用的实体,ref = 10; 指针需要先解引用

9910

C++引入的四种类型转换方式

C++中如果采用C中的强制类型转换,例如很可能我们编写代码时疏忽的将指向const对象的指针转换成非const对象的指针,或者可能将基类对象指针转成了派生类对象的指针,这种方式在C++中有很大隐患。...主要用于已知类型之间的转换,基本数据类型之间的转换或者具有继承关系的类指针和引用之间的转换。 特点: 在编译时执行,不提供运行时检查,因此程序员需要确保转换的安全性。...仅适用于具有虚函数的类层次结构。 优势: 提供运行时类型检查,防止错误的类型转换,使得代码更加安全。...= 100; // 此时修改了原本为常量的值 使用 const_cast 关键字。...主要用于在函数中修改传递给函数的参数,但要小心不要破坏代码的逻辑。 特点: 可能破坏代码的逻辑,慎用。一般用于需要修改传递给函数的参数的场景。

8810

C 语言实现面向对象第一步--对象模型

; 也就是说,有一个接口传递给了它。...封装可以借助 struct,将数据和方法都放到一个结构体内,使用者可以无需关注具体的实现。 一种很直白简单的方式,就是使用函数指针表示成员方法和数据放在一个struct 内。...我们需要一个创建对象和回收资源的方法,可以抄抄 C++ 的作业,C++ 中构造对象使用的是new运算符,new运算符完成了 内存分配 + 调用类构造函数两件事。...new()方法必须知道当前正在创建的是什么类型的对象,在 C++ 中,编译器会自动识别,并生成对应的汇编。 但是在 C 中我们只能手动将类型相关的信息作为参数。...所谓的继承实际上就是将一个Class类型指针放在第一字段。 很简单,因为只有统一放在对象开头,new 方法内才能识别出这个 Class 类型指针。 所以整个对象模型大概是这个样子: ?

97710

C语言和C++的区别是什么?8个点通俗易懂的告诉你

因为参是从右向左的。 缺省参数不能同时在函数声明和定义中出现,只能二者留其一。 缺省值必须是常量或者全局变量。 C语言并不支持缺省。...每天晚上20:00都会开直播给大家分享C/C++游戏编程学习知识和路线方法,群里会不定期更新最新的教程和学习方法,最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实 C/C++ 参数列表又叫参数签名...C/C++ 6、指针和引用 C语言中函数参方式有两种:值和址 以值方式,在函数调用过程中会生成一份临时变量用形参代替,最终把实参的值传递给新分配的临时形参。...如果要改变实参的值,只能通过指针传递。 指针可以解决问题,但是不安全,因此在C++中引入了引用。...:cout< #include using namespace std; int main() { int a,b; cout<<"请输入a,b的值"<<endl; cin>>a

1.1K50

COM聚合技术中的QueryInterface

原因何在?...答案就是C++类的虚函数表。 在C++的类中,如果使用了继承关系,类的结构中就会有一个虚函数表,读者可以自己测试一下,如果是一个没有任何内容的空类,其大小为1 Byte,这个是系统自动填充的内容。...至于为什么是的虚函数表的指针而不是某个成员的指针呢?因为在内存结构中虚函数表是位于最上部的,虚函数表类似于header。 好了,现在对于最开始的问题基本已经明白了。...外部组件CB创建CA时需要获取内部组件CA的IUnknown指针,创建过程中使用NondelegatingQueryInterface进行IUnknown的获取,该函数中将指向CA组件自己的指针强制转换成了非委托未知接口的指针...NondelegatingUnknown和Unknown在结构上是相同的,在传递给m_pUnknownInner时,发生了隐式转换,所以根据函数在内存中的位置,可以找到对应函数,而且,虚函数的调用是运行时确定

84620

C++中strlen()和sizeof()的区别

参考链接: C++ strlen() 一、sizeof  sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等...实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。     ...4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 ...sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸  9.数组作为参数传给函数时的是指针而不是数组,传递的是数组的首地址,  :  fun(char [8])  fun(char [...上面是对静态数组处理的结果,如果是对指针,结果就不一样了  char* ss = "0123456789";  sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间

91620

API设计原则 – QT官网的设计实践总结

有两种方法: 传入一个特殊值(QSize()、-1或者Qt::Alignment(0))来表示『重置』 提供一个明确的重置方法resetFoo()和unsetFoo() 对于iconSize,使用...4.1.2 按常量引用参 vs. 按值参 如果类型大于16字节,按常量引用参。...如果类型有重型的(non-trivial)拷贝构造函数(copy-constructor)或是重型的析构函数(destructor),按常量引用参以避免执行这些函数。...当你找不到好的命名时,写文档也是个很好方法:要做的就是尝试为各个条目(item)(类、方法、枚举值等等)写文档,并用写下的第一句话作为启发。如果找不到一个确切的命名,往往说明这个条目是不该有的。...6.5 布尔类型的getter与setter方法的命名 为bool属性的getter和setter方法命名总是很痛苦。getter应该叫做checked()还是isChecked()?

2.6K20

C++C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 )

* 建议也是紧贴 指针类型 , 与指针名称使用空格隔开 , : int* p = NULL; ) 引用 定义后 , 可以当做变量使用 ; 通过引用 , 可以操作变量 , 访问 , 修改 引用 ,...b // 指针常量常量 - 指针本身不能修改 , 常量指针指针 - 指向常量指针 // 左数右指 , const 在 指针 * 的右边 , 指针常量 , 指针的指向不能更改...获取 变量 a 的地址 , 赋值给 指针常量 b ; 指针常量常量 - 指针本身不能修改 ; 常量指针指针 - 指向常量指针 ; 左数右指 , const 在 指针 * 的右边...+ 语言中实现变量交换的方法 ) 在下面的代码中 , 使用引用作为函数参数 , 也实现了变量交换 ; C++ 中的引用使用非常简单 , 没有使用指针进行操作 ; 在使用引用时 , 可以看到 引用的效果..., 为该对象赋值 ; Student s; s.age = 18; I 、传递结构体对象本身 第一种方式 , 直接传递结构体对象本身 , 函数传递 : 这种方式传递的是 结构体 对象的副本 , 需要拷贝对象然后将拷贝副本作为实参传递给函数

63821

C++重点】类与对象(上)

3.类的引入 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。...比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现, 会发现struct中也可以定义函数。这是因为在C++中将结构体升级为了一种特殊的类。...从上面的话我们就可以明白C++对于封装有独特的方法C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选 择性的将其接口提供给外部的用户使用 。...只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动 递,不需要用户传递. 这里要注意的是,this指针作为参是一个形参是储存在栈上的。

10410

【C语言】strcpy()函数(字符串拷贝函数详解)

个人主页:修修修也 所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 一.strcpy()函数简介 我们先来看一下cplusplus.com - The C++ Resources...除了上述将字符串数组中的字符串拷贝到字符串数组中的操作,我们还可以让strcpy()函数将常量字符串中的字符串拷贝到字符数组中,: 分别给strcpy()函数传入: 拷贝目的地址(即str1),拷贝来源地址...除了上面那种直接将常量字符串放在参数位置形式的参方式,我们还可以通过传递创建的常量字符串指针的形式参,: /* strcpy example */ #include #include...而给来源的地址指针加上const的原因是防止拷贝的过程中将来源的内容不慎修改,在*指针左侧加上const就可以使const修饰的指针指向的内容变成常量....str4中的字符串拷贝到str3字符数组中: vs2022中测试如下: 成功运行,最后我们测试一下函数遇到参为NULL指针的情况: 可以看到,assert()成功抛出了异常,并终止了程序非法运行: 结语

22210

指针*和引用&的区别使用

这种调用方法我一直搞得晕晕的,正好这次一次性根除。这种传递参数的方法称为按引用传递。按引用传递允许被调用函数能够访问调用函数中的变量。这是C++相比C的一个超越。...使用const参数可以兼容非const参。 将引用用于结构 C++引入引用主要就是为了和结构和类。 它还通过让函数返回指向结构的引用而增添了一个有趣的特点,这与返回结构有所不同。...注意点:不允许将常量数据赋值给非常量指针,个中理由就不用多解释了吧。...3、通过指针返回结构 具体操作参考第二点。...当然,这里还有另外的应用场景: void test2(const JieGouTi1 *a,JieGouTi2 *b) { //将a中的某些值赋值给b } //这里有一个注意点,进去赋值的结构指针最好用

1K50
领券