这里是类定义(用于异常处理):
class MyException {
public:
MyException(const char * pTxt) : pReason(pTxt){};
const char * pReason;
};
后来使用如下:
throw MyException("file too short");
抛出后,是否创建并初始化了一个新对象?无论如何,我不明白类定义如何允许用文本字符串初始化它。它需要一个指向文本字符串的指针,不是吗?然后将pReason设置为该指针,对吧?这怎么涉及行const char * pReason?我很困惑,至少有人能向我解释课程定义吗?我可能只是在寻找明显的东西。我复制了上面的代码来自“c ++ for game programmers”第90页,顺便说一句。
答案 0 :(得分:1)
C ++中的文字字符串是指向字符串的指针......实际上是一种类型。更迂腐,它是一个字符数组,后跟一个整数值为零的字符。字符是整数。 Erm ...在C ++中,字符串文字不是STL字符串类std :: string的实例。至少可以说,这在面向对象的语言中是相当不寻常的。这是C ++野性和鲁莽青年的神器。
如果将字符串文字分配给任何内容(除非您将其用作数组的初始值设定项),或将其传递给函数,则分配或传递的是数组中第一个字符的地址 - 指针到字符串。这就是你在构造函数调用中看到的内容:传递给构造函数的是字符串文字中第一个字符的地址,它存储在编译器认为的任何地方所属。我们的业务都不在那里。
此行将pReason声明为类的成员变量。 const部分意味着你不能改变它所指向的字符串(除非你不顾一切地去做,但你真的不应该这样做。)
const char * pReason;
在C ++中,您可以告诉编译器您的类将拥有该类型和该名称的成员。
答案 1 :(得分:0)
const char * pReason是一个字段的声明。构造函数包含初始化程序pReason(pTxt)。
编辑:我在评论中的评论后编辑了这篇文章。