相关疑难解决方法(0)

在C++标准中,当违反"shall"要求时,指定要发生什么?

例如,着名的单词(§3.2/ 1)

任何翻译单元都不得包含任何变量,函数,类类型,枚举类型或模板的多个定义.

除非另有说明,否则我认为"必须"的要求应被解释为"除非程序形成不良".然而,其他人则声称"应"代表"否则行为未定义".

在每种情况下,我都会遇到标准,其中"必须"要求后面没有"行为未定义"或"无需诊断"之类的内容,其中发生的规则显然是可以诊断的规则.由我所知的所有编译器诊断出来(以上段落就是一个例子).这就是为什么我认为这意味着"否则程序形成不良",需要诊断.

无论如何,那些只是我的想法.我很欣赏一个权威的答案.

c++ language-lawyer

20
推荐指数
2
解决办法
893
查看次数

如果比较函数不是运算符<?,为什么std :: sort会崩溃?

以下程序是使用VC++ 2012编译的.

#include <algorithm>

struct A
{
    A()
        : a()
    {}

    bool operator <(const A& other) const
    {
        return a <= other.a;
    }

    int a;
};

int main()
{
    A coll[8];
    std::sort(&coll[0], &coll[8]); // Crash!!!
}
Run Code Online (Sandbox Code Playgroud)

如果我return a <= other.a;改为return a < other.a;那么程序按预期运行,没有例外.

为什么?

c++ algorithm standards exception

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×2

algorithm ×1

exception ×1

language-lawyer ×1

standards ×1