gpt4 book ai didi

c++ - C++ 编程语言,定义与声明练习(简单,如果需要 XD 的帮助很乏味)

转载 作者:太空狗 更新时间:2023-10-29 21:08:14 24 4
gpt4 key购买 nike

我一直在研究 Bjarne Stroustrup 的“The C++ Programming Language”(第 2 版 - 我知道我真的应该买一本新的,但这是一本图书馆的书!),并且对他的一个更简单的问题有一些疑问.在第 2 章中,在谈到声明和常量时,他列出了一组声明,其中一些也是定义。在本章末尾的练习中,他要求读者返回并重新编写列表,这次将所有已定义的声明更改为声明,并将所有未定义的声明更改为具有定义。

我已经完成了这个任务,希望大部分是正确的,但有几个部分我被卡住了。如果有人可以快速浏览我的列表,检查是否有任何我错误分配的原始列表,然后检查我的更改,我将不胜感激 - 包括最具体的如何声明但不定义 typedef,如果我的 enum declaration-not-definition 是正确的。非常感谢任何帮助的人。我很抱歉,因为这不是严格意义上的直接代码问题 - 即这里没有可编译的代码,它更...我不知道。但它确实有代码,所以我希望没关系。

// Original:

/*

char ch; // Definition.
int count = 1; // Definition.
char* name = "Njal"; // Definition.
struct complex { float re, im; }; // Definition.
complex cvar; // Definition.
extern complex sqrt(complex); // Declaration, NOT definition.
extern int error_number; // Declaration, NOT definition.
typedef complex point; // Definition.
float real(complex* p) { return p->re; } // Definition.
const double pi = 3.1415926535897932385; // Definition.
struct user; // Declaration, NOT definition.
template<class T> abs(T a) { return a < 0 ? -a : a; } // Definition.
enum beer { Carlsberg, Tuborg, Thor }; // Definition.

*/

// Definitions/Declarations switched:

/*
extern char ch;
extern int count;
extern char* name;
struct complex;
extern complex cvar;
complex sqrt(complex in) { // Yes, my maths may be wrong here. Doing the actual maths from memory.
complex out;
out.re = (in.re * in.re) - (in.im * in.im);
out.im = (in.re * in.im)*2;
return out;
}
int error_number;
// No idea how to declare but not define a typedef!
float real(complex* p);
extern const double pi;
struct user { string name; int age; char gender; }; // Lets assume we include <string>, and yes, using int for age *might* be a bit wasteful, but meh.
template<class T> abs(T a);
extern enum beer; // Not sure if this is right.

*/

最佳答案

typedef complex point;不是C++中的定义,只是C中的定义。

据我所知,您也不能在不改变其含义的情况下为 pi 提供非定义声明,因为它显示的定义具有内部链接,但是如果您将 extern const double pi; 你会给它外部链接(可能与其他翻译单元的 pi 名称冲突)。注意联动规则复杂

static int a;
extern int a; // valid, 'a' still internal

extern int b;
static int b; // invalid!

const double pi1 = 3.14;
extern const double pi1; // valid, and 'pi1' is internal

extern const double pi2;
const double pi2 = 3.14; // valid, but 'pi2' is now external

您也不能只声明一个枚举而不定义它。

我相信您的其他解决方案是正确的。

关于c++ - C++ 编程语言,定义与声明练习(简单,如果需要 XD 的帮助很乏味),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538009/

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