小编Ske*_*een的帖子

C++ 11可变数量的参数,相同的特定类型

问题很简单,我如何实现一个带有可变数量参数的函数(类似于可变参数模板),但是所有参数都具有相同的类型,比如说int.

我正在考虑类似的东西;

void func(int... Arguments)
Run Code Online (Sandbox Code Playgroud)

或者,类型的递归静态断言不起作用吗?

c++ variadic c++11

45
推荐指数
5
解决办法
2万
查看次数

Javascript和WebGL,外部脚本

只是好奇; 如何将我的webgl着色器放在外部文件中?

目前我正在;

    <script id="shader-fs" type="x-shader/x-fragment">
        #ifdef GL_ES
            precision highp float;
        #endif

        void main(void)
        {
            gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
        }
    </script>

    <script id="shader-vs" type="x-shader/x-vertex">
        attribute vec3 aVertexPosition;

        uniform mat4 uMVMatrix;
        uniform mat4 uPMatrix;

        void main(void)
        {
            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
        }
    </script>
Run Code Online (Sandbox Code Playgroud)

在我的html标题中,如何从外部文件中链接? - 我尝试了通常的javascript方法;

<script type="text/javascript" src="webgl_shader.js"></script>
Run Code Online (Sandbox Code Playgroud)

javascript external extern webgl opengl-es-2.0

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

关于AT&T x86语法设计的问题

  1. 任何人都可以向我解释为什么AT&T语法中的每个常量前面都有一个"$"?
  2. 为什么所有寄存器都有'%'?
  3. 这只是让我做很多蹩脚打字的另一种尝试吗?
  4. 另外,我是唯一一个发现:16(%esp)真的违反直觉[esp+16]吗?
  5. 我知道它编译成同样的东西,但为什么有人想要输入很多'$'和'%'而不需要? - 为什么GNU选择此语法作为默认语法?
  6. 另一件事,为什么at&t语法中的每条指令前面都有一个:l? - 我知道它的操作数大小,但为什么不让汇编程序弄清楚呢?(我是否想要在不是那么大的操作数上做一个movl?)
  7. 最后一件事:为什么mov参数倒置了?

是不是合乎逻辑:

eax = 5
mov eax, 5
Run Code Online (Sandbox Code Playgroud)

at at&t是:

mov 5, eax
5 = a (? wait what ?)
Run Code Online (Sandbox Code Playgroud)

注意:我不是想乱跑.我只是不明白他们所做的设计选择,我试图了解他们为什么做了他们所做的.

x86 assembly att intel-syntax

18
推荐指数
3
解决办法
1894
查看次数

关于函数的C++模板专业化

我正在玩模板专业化,我发现了一个似乎无法解决的问题; 这是我的代码:

template<int length, typename T>
void test(T* array)
{
    ...
    test<length-1>(array);
}

template<typename T>
void test<0>(T* array)
{
    return;
}
Run Code Online (Sandbox Code Playgroud)

所以我要做的就是传递模板中要处理的内容的长度.

问题是,编译这个,很好地输出:

a.cpp:83:43: error: template-id 'test<0>' in declaration of primary template
a.cpp: In function 'void test(T*) [with int length= -0x000000081, T = int]':
a.cpp:77:9:   instantiated from 'void test(T*) [with int length= -0x000000080, T = int]'
a.cpp:77:9:   instantiated from 'void test(T*) [with int length= -0x00000007f, T = int]'
a.cpp:77:9:   [ skipping 151 instantiation contexts ]
a.cpp:77:9:   instantiated from 'void test(T*) …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization function-templates

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

用C++模拟ML样式模式匹配

标题几乎说明了,我将如何在C++中模拟ML样式模式匹配,例如;

Statement *stm;
match(typeof(stm))
{
    case IfThen: ...
    case IfThenElse: ...
    case While: ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

其中'IfThen','IfThenElse'和'While'是继承自'Statement'的类

c++ pattern-matching

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

测试lambda是否是无状态的?

如果一个lambda是无状态的,也就是说,如果它捕获了任何东西,我将如何进行测试?我的猜测是使用带有函数指针重载或模板特化的重载解析?

int a;
auto l1 = [a](){ return 1; };
auto l2 = [](){ return 2; };
// test l1 and l2, get a bool for statelessness.
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11 c++14

13
推荐指数
3
解决办法
2275
查看次数

有关C++非POD联合的问题

C++ 11让我们可以在联合中使用非POD类型,比如说我有以下代码;

union
{
    T one;
    V two;
} uny;
Run Code Online (Sandbox Code Playgroud)

在我班级的某个地方,一次只有一名成员活跃,现在我的问题相当简单.

  1. uny的默认值是多少? - 未定义?
  2. 每当我的班级被毁坏时,哪些成员(在工会内),是否会被毁坏?
    • 假设我必须使用std :: typeinfo来跟踪哪个是活动成员,那么我是否应该在析构函数中对该成员显式调用析构函数?
  3. 有没有人有语言提案的链接,这会改变工会接受非POD类型?

c++ pod unions discriminated-union c++11

12
推荐指数
1
解决办法
3579
查看次数

alignas说明符是否与'new'一起使用?

我的问题很简单;

alignas说明符是否与'new'一起使用?也就是说,如果一个struct定义为对齐,那么在分配new时它是否会对齐?

c++ memory-alignment new-operator c++11

11
推荐指数
2
解决办法
4719
查看次数

Bitfields,为什么具体实现?

C/C++位域似乎在硬件驱动程序和二进制网络传输中有很多应用.但是它们似乎并没有被广泛使用,并且通常不鼓励,因为实际的二进制布局是特定于实现的,如C99标准6.7.2.1/10中的引用所示 - "结构和联合说明符";

实现可以分配足够大的任何可寻址存储单元来保持位域.如果剩余足够的空间,则紧跟在结构中的另一个位字段之后的位字段将被打包到相同单元的相邻位中.如果剩余的空间不足,则是否将不适合的位域放入下一个单元或重叠相邻单元是实现定义的.单元内的位域分配顺序(高阶到低阶或低阶到高阶)是实现定义的.未指定可寻址存储单元的对齐.

我的问题很简单; 为什么委员会决定将位字段保留为特定于实现的东西,从而使其成为编译器构造,主要用于减少内存使用,在许多情况下它可用于提供良好的二进制布局,并且免费开发人员从小巧的代码?

c c++ standards bit-fields

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

alignas说明符与__attribute __(对齐),c ++ 11

我目前正在使用C++ 11开发OS内核,我遇到了一个问题,我似乎找不到自己的答案.

目前我正在使用编译器特定属性(例如gcc __attribute__(aligned))来调整我的分页结构,但是我想要使用C++ 11 alignas说明符,而在Clang ++上这不是问题,因为它很乐意接受4096对齐作为参数对齐,但G ++没有!

所以首先alignas specifier,它和gcc 之间的主要区别__attribute__(aligned)显然都确保了对特定值的对齐,但是gcc中的alignas说明符似乎有128的限制,而属性似乎几乎是无限的,为什么会这样?

另外为什么不能将const整数传递给alignas说明符?

c++ gcc alignment clang c++11

10
推荐指数
1
解决办法
6340
查看次数