相关疑难解决方法(0)

在C++中,如果throw是一个表达式,它的类型是什么?

我在我的一个简短的尝试中选择了这个来reddit:

http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/

基本上,作者指出在C++中:

throw "error"
Run Code Online (Sandbox Code Playgroud)

是一种表达.这在C++标准中实际上非常清楚地阐明了,包括主文本和语法.但是,至少对我来说不清楚的是表达的类型是什么?我猜到了" void",但是有点尝试使用g ++ 4.4.0和Comeau产生了这样的代码:

    void f() {
    }

    struct S {};

    int main() {
        int x = 1;
        const char * p1 = x == 1 ? "foo" : throw S();  // 1
        const char * p2 = x == 1 ? "foo" : f();        // 2
    }
Run Code Online (Sandbox Code Playgroud)

编译器对// 1没有问题,但在// 2上进行了禁止,因为条件运算符中的类型不同.所以throw表达式的类型似乎不是空的.

那是什么?

如果您回答,请使用标准中的引号备份您的陈述.


事实证明,抛出表达式的类型并不像条件运算符如何处理throw表达式那样 - 这在今天之前我当然不知道.感谢所有回复的人,尤其是David Thornley.

c++ throw

115
推荐指数
3
解决办法
5464
查看次数

标签 统计

c++ ×1

throw ×1