gpt4 book ai didi

c++ - 为什么 `A & a = a` 有效?

转载 作者:太空狗 更新时间:2023-10-29 21:30:31 26 4
gpt4 key购买 nike

#include <iostream>
#include <assert.h>

using namespace std;

struct Base
{
Base() : m_member1(1) {}

Base(const Base & other)
{
assert(this != &other); // this should trigger
m_member1 = other.m_member1;
}

int m_member1;
};

struct Derived
{
Derived(Base & base) : m_base(m_base) {} // m_base(base)

Base & m_base;
};

void main()
{
Base base;

Derived derived(base);

cout << derived.m_base.m_member1 << endl; // crashes here
}

上面的例子是一个错误输入的构造函数的综合版本。我在类成员 Derived::m_base 中使用了引用,因为我想确保该成员将在调用构造函数时被初始化。一个问题是 GCC 和 MSVC 都没有在 m_base(m_base) 处给我警告。但对我来说更严重的是断言发现一切都很好,后来应用程序崩溃了(有时离错误还很远)。问题:有什么办法可以指出这样的错误吗?

最佳答案

断言不会触发,因为您没有在调用 m_base(m_base) 中创建 Base 的实例。这只是初始化引用 Base& m_base。如果您真的想调用复制构造函数,则将 m_base 声明为值 Base m_base

此外,捕获此类错误的一种方法是让您的编译器警告未使用的参数。 gcc 标志是 -Wunused-parameter,或 -Wextra -Wunused

关于c++ - 为什么 `A & a = a` 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com