【发布时间】:2015-04-03 15:46:36
【问题描述】:
我在尝试在 VS2013 Community C++ 下编译的一些代码中遇到了上述 typedef。
我找到了对 __declspec(align(16)) 和 allignas(16) 的引用,但无论我如何尝试将它们与 typedef 结合使用,代码的某些部分都会抱怨;使用这种类型定义:
typedef __declspec(align(16)) int64_t x_t;
函数声明出现以下错误:
bool funcSame(x_t e1, x_t e2)
{
return e1[eStart] == e2[eStart] && e1[eEnd] == e2[eEnd];
}
上面的错误完全是 '[' with: no operator "[]" 匹配这些操作数
对于变量声明:
x_t a = { 0, 0 }; // at the 2nd '0' error too many initializer values
代码依赖于将 x_t 视为利用 SSE 操作的两个 64 位值的向量。
有人能解释一下我如何替换这个 typedef 来获取代码来编译和使用 SSE 操作吗?
谢谢你, 格雷厄姆....
【问题讨论】:
-
eval_t和x_t有什么关系? -
@Kerrek:感谢您发现这一点,我已编辑。我试图删除上下文以帮助专注于问题。
-
由于
x_t是一个简单类型(如long),除非eEnd和eStart都是指针,e1[eEnd](等)表示法必然是错误的。 -
@Jonathan:eStart 和 eEnd 分别是值 0 和 1 的枚举的一部分。 gcc 编译器似乎使用 typedef 来定义一个包含 2 个连续 64 位值的类型,然后允许在该类型内进行索引(按 0 和 1)。
-
也许“向量大小”的意思是,但
typedef __declspec(align(16)) int64_t x_t;没有声明数组类型,我有信心这是导致编译错误的原因。仅适度自信;我没有使用矢量大小表示法,所以我没有研究它的作用。
标签: c++ visual-c++