gpt4 book ai didi

c++ - 对内置数据类型使用前向声明

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:09 25 4
gpt4 key购买 nike

我知道我们应该尽可能使用前向声明而不是 include 来加快编译速度。

我有一个类Person像这样。

#pragma once

#include <string>

class Person
{
public:
Person(std::string name, int age);
std::string GetName(void) const;
int GetAge(void) const;
private:
std::string _name;
int _age;
};

和一个类 Student像这样

#pragma once

#include <string>

class Person;

class Student
{
public:
Student(std::string name, int age, int level = 0);
Student(const Person& person);
std::string GetName(void) const;
int GetAge(void) const;
int GetLevel(void) const;
private:
std::string _name;
int _age;
int _level;
};

在 Student.h 中,我有一个前向声明 class Person;使用 Person在我的转换构造函数中。美好的。但是我做了#include <string>在使用 std::string 时避免编译错误在代码中。如何在这里使用前向声明来避免编译错误?可能吗?

谢谢。

最佳答案

自用string作为

std::string _name;
//^^^^^^^^^ concrete member

string的整体结构将需要,因此必须需要声明。你必须 #include <string> .


声明string可以省略,如果你写,例如

std::string* _name;
//^^^^^^^^^^ pointer or reference

您可以使用前向声明,但我仍然建议您不要这样做,因为std::string不是像 Person 或 Student 这样的简单结构类型,而是涉及很多模板的非常复杂的类型:

template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >
class basic_string { ... };
typedef basic_string<char> string;

如果你错误地转发声明它(例如 class string; ),当你实际使用它时编译会因为类型冲突而失败。

关于c++ - 对内置数据类型使用前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989125/

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