Ocxs/Cpp-Primer

chapter7_quesiton4_ex7.53

Closed this issue · 2 comments

Ocxs commented

在您贴的代码中,

#ifndef ex7_53_h
#define ex7_53_h
class Debug
{
public:
    constexpr Debug(bool b = true) :hw(b), io(b), other(b){}
    constexpr Debug(bool h, bool i, bool o) : hw(h), io(i), other(o){}
    constexpr bool any() { return hw || io || other; }
    void set_io(bool b){ io = b; }
    void set_hw(bool b){ hw = b; }
    void set_other(bool b){ hw = b; }
    ~Debug(){}                            //add
private:
    bool hw;
    bool io;
    bool other;
};
#endif

这一句constexpr bool any() { return hw || io || other; }我在vs2013底下调试会报错,报错内容: 只允许在文本类类型中使用 constexpr成员函数 。而且虽然报错,但是编译也能过,是我写在头文件里,在main函数的cpp文件中没有include导致的吗?
但是如果我将析构函数~Debug(){}去掉,这个报错就没了。这是怎么回事呢?

还有就是书上在代码后面备注的

    bool rt;        // runtime error
    bool io;        // I/O error
    bool other;     // the others

是什么意思?

update: 您在exercise.54的答案里说:

a constexpr function must contain exactly one return statement

这句话我在书上那一节也看过,这里说只能有一句return语句,是说整个函数体只能有一个return 语句,其他赋值语句什么的都不能有,还是说可以有其他语句,但是return语句只能有且只有一个?

pezy commented

我在vs2013底下调试会报错

我试了一下,也报错,而且也编不过。check: http://stackoverflow.com/questions/20264644/constexpr-not-compiling-in-vc2013,貌似是 VC2013 对 constexpr 的支持有问题。

Visual Studio 学习 C++ 并不是一个好主意,更推荐使用 gcc 或 Clang 编译器。(对 C++11 标准支持更好)

是什么意思?

仅仅是对变量缩写的解释。。。

是说整个函数体只能有一个return 语句

是。

Ocxs commented

@pezy Thx !:smile: