函数标题中的变量分配
Variable Assignment in Function Header
在函数或构造函数的头中分配变量有什么优势(如果存在)?换句话说,以下两组代码之间的区别是什么?为什么我更喜欢其中一组而不是另一组?
示例1:
class A {
private:
char* b;
public:
A(size_t var = 8*1024*1024) {
...
b = new char[var];
...
}
...
};
示例2:
class A {
private:
char* b;
public:
A() {
const size_t var = 8*1024*1024;
...
b = new char[var];
...
}
...
};
我感谢任何建设性的意见。
这是一个默认参数。它允许调用方在不传递参数的情况下调用函数,在这种情况下使用默认值。
因此,在第一个例子中,可以调用:
A* myADefault = new A(); // creates A with default value (8*1024*1024)
A* myLargerA = new A(16*1024*1024); // creates A passing 16*1024*1024 instead of the default
(有关更多信息,请参阅本教程中的"参数中的默认值"部分:http://www.cplusplus.com/doc/tutorial/functions2/)
这真的很不一样。
第一个表示默认值,这意味着您可以声明A test
或A test2(42)
。在test
中,b
的大小将为8*1024*1024。在test2
中,b
的大小将为42。
第二个片段只是一个常量值。
根据你的需要,你会选择其中一个。。。
这是一个所谓的默认参数:http://msdn.microsoft.com/en-us/library/91563f79(v=vs.80).aspx
不同的是,在第一种情况下可以设置var
的值,但在第二种情况下不能设置。
您所写的是两个不同的存在:在第一个示例中,var是一个8*1024*1024的input parameter with a default value
,而在第二个示例中它是一个local const variable
。即使行为相同,内部结构也不同。
要回答你关于一种方法相对于另一种方法的偏好的问题,这取决于你的设计:前者增加了一些灵活性,但也暴露了一个可能应该隐藏的参数,而后者更严格,但也不太容易出错。
但这两种情况都不是特别好。应在构造函数初始化列表中初始化成员变量。例如,这是初始化const
成员变量的唯一方法。
class A {
private:
char* b;
public:
A(size_t var = 8*1024*1024): b(new char[var]) {
...
}
~A() {
delete [] b;
}
};
即便如此,智能指针对b
来说还是更好的。
- 是否可以使用其他变量为变量分配值,而无需在 C++ 中更改其值?
- 将字符串变量分配给无符号字符变量
- 将延迟变量分配给引用变量
- 为什么以下变量分配不正确
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- C++ 无法将字符数组变量分配给字符串变量
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 识别矩阵变量分配的行为
- C 为什么在原始双阵列中的分配似乎比双变量分配要快得多
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 将局部方法变量分配给类指针
- 类构造函数中的静态成员变量分配
- 如果条件语句中的变量分配
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 需要帮助了解指针变量分配
- 从值捕获的变量分配到lambda参数时,GCC编译器分割故障
- 将非按引用变量分配给返回按引用的函数,反之亦然
- 通过结构指针访问结构变量分配错误数据
- 分段故障(核心倾倒)变量分配
- 在名称空间之外的C 中的外部变量分配值