这个函数声明在c ++中意味着什么

时间:2011-03-08 09:17:12

标签: c++

virtual const char* what() const throw()
{

}

AFAIK它是一个函数,它将返回一个指向可变char的常量指针。剩下的我不确定。有人可以帮忙吗?

11 个答案:

答案 0 :(得分:24)

关于const throw()部分:

  • const表示此函数(它是一个成员函数)不会更改调用它的对象的可观察状态。编译器强制执行此操作,不允许您从此方法中调用非const方法,并且不允许您修改成员的值。
  • throw()表示您向编译器保证此函数永远不会允许发出异常。这被称为异常规范,并且(长话短说)没用,可能会产生误导。

答案 1 :(得分:10)

这意味着what是一个返回const char*的虚拟成员函数,可以在const对象上调用(最后是const)。 throw()表示有点保证不会抛出任何内容。

签出exception specifications in C++,并注意它们在C ++ 0x中已弃用:)

答案 2 :(得分:7)

从左到右:

  • virtual - 此函数可在派生类中重写
  • const char* - 此函数返回一个指向常量(数组)char
  • 的可修改指针
  • what() - 此函数不带参数
  • const - 此函数不会修改调用它的对象的(非mutable)成员,因此可以在其类的const个实例上调用< / LI>
  • throw() - 此函数不会抛出任何异常。如果是,则会调用unexpected

答案 3 :(得分:3)

虚函数返回指向不可修改的字符缓冲区的指针,不带参数,不修改类所属的任何成员变量(即可以在const实例上调用),并且不会抛出任何类型例外。

答案 4 :(得分:2)

函数what()不带参数,将pointer返回const char(因此您无法修改指针所指向的内容,但您可以修改指针本身)。它是virtual,因此可以在派生类中重写其行为。它不会抛出异常。它不会修改它所属的类的任何成员。

答案 5 :(得分:1)

这是一个返回const char *的虚函数。方法末尾的const表示不允许更改调用它的对象的状态。这意味着不允许修改对象的任何成员变量。 throw()部分是异常规范,表示该方法不会抛出任何异常。

答案 6 :(得分:1)

  1. virtual:这意味着该函数可以在子类中重新实现,并且通过基类指针调用该方法将最终调用重新实现。

  2. const char *不是指向可变字符的常量指针 - 反之亦然。

  3. const表示甚至可以在此类的const实例上调用此方法。

  4. throw()表示此方法不会产生任何例外。

答案 7 :(得分:0)

它实际上返回一个指向常量字符块的 mutable 指针。

其他人已经解释了其余部分。

答案 8 :(得分:0)

关于函数后的const:真的有两个 意义,编译器理解的内容,以及通常的内容 编程约定使它成为意思。就编译器而言 有关,它所做的就是使this指针指向 常量。 const可以被抛弃,或者各种各样的间接 用于修改对象的可观察状态。到底, 这个const意味着程序员想要的意思。

今天通常的惯例是它意味着 对象的可观察状态不会改变。对于一些 合理定义“可观察状态”。

关于异常规范:一个空的异常 规范是无抛出保证,非常重要 在考虑异常安全时。下一个版本 标准已经弃用了异常规范,但确实如此 提供一些指定函数的其他方法 永远不要扔。

答案 9 :(得分:0)

  1. virtual用来覆盖基类的派生类
  2. const char*这是一个指向常量字符的指针
  3. what返回以空字符结尾的字符序列,可用于标识任何异常
  4. throw()中的throw参数为空,因此它将为所有异常调用std :: unexpected
#include<iostream>
#include<exception>

class Myexception:public exception
{
    virtual const char* what() const throw()
    {
        return "My exception here";
    }
} myex;

int main()
{
    try() 
    {
        throw myex;
    }
    catch(exception &e)
    {
        cout<<e.what()<<endl;
    }

    return 0;
}

答案 10 :(得分:-1)

所有库例外的基类。

这是标准库和某些语言表达式抛出的所有异常的基类。您可以自由地派生自己的异常类,或使用不同的层次结构,或者抛出非类数据(例如,基本类型)。