当传入的成员变量和参数的名称相同时,是否存在未定义的行为?
Is it undefined behavior when both the name of the member variable and parameter being passed in are the same?
假设我有一个像这样的类:
class Base
{
int a;
public void Initialize(int a)
{
a = a;
}
}
(是的,这段代码是糟糕的编程实践,但我只是写它,所以它可以作为一个例子)
对于Initialize函数,成员变量的名称和传入的形参都是相同的。
在这种情况下,这是未定义的行为吗?或者,如果存在歧义,编译器会选择成员变量(或形参)。
它定义的行为…将局部变量a
(参数)赋值给自身。如果您想将其分配给成员,请使用this->a = a;
像这样在Initialize()中使用时,是的,您只是将a赋值给a(对int类型不做任何事情)。然而,对于构造函数和初始化列表,它的工作方式不同!如果您的代码如下所示:
Base(int a) : a(a) {}
它实际上将成员a初始化为参数a
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?