小编Xen*_*eno的帖子

GCC错误?链接方法,破坏序列点

我已经调试了一段时间的程序,最终发现错误是由于引用没有像我想象的那样更新.

这是一个显示我遇到的问题的示例:

#include <iostream>
using namespace std;

struct Test {
    Test& set(int& i){ i = 10; return *this; }
    Test& print(const int& i){ cout << i << endl; return *this; }
};

int main(void){
    int i = 0;
    Test t;

    t.set(i).print(i + 5);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我曾预料到这里的print()方法会输出15,但输出5.

编辑:10天后我才意识到,用clang输出15!这是GCC中的错误吗?

c++ gcc compiler-bug

15
推荐指数
1
解决办法
361
查看次数

为什么g ++在编译的二进制文件中存储类名?

我注意到如果我运行strings我的程序,由g++输出编译包含它使用的各种类的名称.

该程序是使用-O3和不使用-g或编译的,-p当我删除二进制文件时,类名仍然存在.

我想知道为什么有必要g++将这些信息存储在二进制文件中?存在的类名似乎都是使用虚函数的类,所以我怀疑这与它有关.

c++ gcc virtual-functions g++

11
推荐指数
1
解决办法
1068
查看次数

constexpr返回数组,gcc警告

我写了一个返回数组的constexpr函数.

#include <iostream>

constexpr auto get_str(void)
-> const char(&)[4] {   
    return { 'T', 'E', 'S', 'T' };
}

constexpr int sum(const char(&str)[4]){
    return str[0] + str[1] + str[2] + str[3];
}

int main(void){

    constexpr int s = sum(get_str());

    std::cout << s << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

g ++ 4.8正确编译代码,但发出以下警告:

test.cpp: In function ‘constexpr const char (& get_str())[4]’:
test.cpp:5:30: warning: returning reference to temporary [-Wreturn-local-addr]
  return { 'T', 'E', 'S', 'T' };
Run Code Online (Sandbox Code Playgroud)

在这种情况下警告是否正确?从这样的constexpr函数返回数组是不正确的,即使该函数在运行时从未实际调用过,只是在编译期间?

c++ arrays gcc gcc-warning constexpr

8
推荐指数
1
解决办法
1155
查看次数

OpenGL:每个图元的顶点属性数组?

我想知道在 OpenGL 中(通过扩展或其他方式)是否有可能有一个由glVertexAttribPointer类型函数指定的属性数组,它为每个基元(或 N 个顶点)前进一个而不是每个顶点一个?

例如,如果我有一个三角形数组,它们目前具有纯色,我必须为每个顶点重复相同的颜色数据,我想要的是沿着这些线的东西:

struct pos {
    uint8_t x, y;
} positions[NUM_VERTICES];

struct col {
    uint8_t r, g, b;
} colors[NUM_VERTICES / 3];
Run Code Online (Sandbox Code Playgroud)

其中的一个元件colors阵列被用于每3个连续的重复使用positions时两个阵列被提交给OpenGL的与元件glVertexAttribPointer和呈示具有单个glDrawArrays(GL_TRIANGLES, ...);

我找到了ARB_instanced_arrays扩展,它提供了glVertexAttribDivisorARB起初看起来很有希望的功能,但我认为它不像我描述的那样工作。

c opengl

5
推荐指数
1
解决办法
1721
查看次数

Javascript&html:不透明度更改导致意外行为

我开始通过使用绝对定位和通过Javascript改变它们的不透明度在3个元素之间进行简单的淡入淡出过渡,但是下面的代码不能像我预期的那样工作,我不确定为什么.

<html>
<head>
<style>
#item0, #item1, #item2 {
    opacity: 0.0;
    position: absolute;
    top: 100px;
    left: 100px;
    border: 1px solid #000;
    height: 200px;
    width: 200px;
    line-height: 200px;
    text-align: center;
    vertical-align: middle;
    font-size: 26px;
}
#item0 { opacity: 1.0; }
</style>
<script>
var count = 0;
var items;
function init(){
    items = document.getElementById("container").getElementsByTagName("div");
    setInterval(fade, 5000);
}
function fade(){
    fadeElements(items[count], items[(count + 1) % 3]);
    count = (count + 1) % 3;
}
function fadeElements(prevItem, nextItem){
    prevItem.style.opacity -= 0.1;
    nextItem.style.opacity += 0.1;
    if(nextItem.style.opacity …
Run Code Online (Sandbox Code Playgroud)

html javascript dom

0
推荐指数
1
解决办法
593
查看次数