相关疑难解决方法(0)

究竟什么是"假设"规则?

正如标题所说,

究竟什么是"假设"规则?

一个典型的答案是:

允许任何和所有代码转换不会改变程序的可观察行为的规则

我们会不时地从某些实现中获取行为,这些行为归因于此规则.好多次错了.那么,这个规则究竟是什么呢.标准没有明确地将此规则作为一个部分或段落提及,那么究竟什么属于这条规则的范围?对我来说,这似乎是一个灰色区域,标准没有详细定义.有人可以根据标准的参考资料详细说明细节.

注意:将其标记为C和C++,因为它与两种语言都相关.

c c++ optimization c++-faq as-if

83
推荐指数
2
解决办法
7359
查看次数

涉及编译器重新排序的优化示例

只要as-if规则成立,C&C++编译器就可以重新排序操作.编译器执行此类重新排序的示例是什么,通过这样做可以获得哪些潜在的性能提升?

欢迎在任何平台上涉及任何(C/C++)编译器的示例.

c c++ compiler-optimization

7
推荐指数
2
解决办法
1434
查看次数

复制构造函数省略?

可能重复:
为什么析构函数只被调用一次?

鉴于下面的代码,我无法理解gcc中的输出.我希望创建和销毁两个对象,但只能看到对构造函数和析构函数的一次调用.这里发生了什么事?

#include <string>
#include <iostream>

struct Huge{
        Huge() { std::cout << "Constructor" << std::endl; }
        Huge(Huge const &r) { std::cout << "Copy Constructor" << std::endl; }
        ~Huge() { std::cout << "Destructor" << std::endl; }
};

Huge g() {
        std::cout << "Entering g" << std::endl;
        Huge temp;
        std::cout << "Exiting g" << std::endl;
        return temp;
}

int main(){
        Huge h2(g());
        std::cout << "Before leaving main" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

g ++(4.4)中此代码的输出是

输入g

构造函数

退出g

在离开主要之前

析构函数

c++ copy-constructor copy-elision

4
推荐指数
1
解决办法
1208
查看次数