C++ “是什么意思?”;C4649:在此上下文中忽略属性“;?
这个警告是什么意思 这是mcveC++ “是什么意思?”;C4649:在此上下文中忽略属性“;?,c++,visual-c++,alignment,c++14,compiler-warnings,C++,Visual C++,Alignment,C++14,Compiler Warnings,这个警告是什么意思 这是mcve template<class K> class TTT{ public: alignas(alignof(K)) union{ char raw[sizeof(K)]; K rawK; }; //<-- error at this line }; 我出现在我的计算机中,但无法复制此警告 其他信息:- 请注意,TTT从未真正实例化过 如果我删除单词alignas(al
template<class K> class TTT{
public: alignas(alignof(K))
union{
char raw[sizeof(K)];
K rawK;
}; //<-- error at this line
};
我出现在我的计算机中,但无法复制此警告
其他信息:-
- 请注意,
从未真正实例化过TTT
- 如果我删除单词
,警告将消失李>alignas(alignof(K))
- 通过一些测试用例,这个类实际上是可用的
struct
或union
关键字和structure/union标记之间
所以应该是这样的
template<class K> struct TTT{
union alignas(alignof(K)) {
// ^^^^^^^^^^^^^^^^^^^
// Note placement
char raw[sizeof(K)];
K rawK;
};
};
模板结构TTT{
联合校准(校准(K)){
// ^^^^^^^^^^^^^^^^^^^
//注释位置
生炭[sizeof(K)];
罗克;
};
};
在VS2017中,我得到错误C2024:“alignas”属性仅适用于变量、数据成员和标记类型,这可能是您(假定较旧)的VS版本应该说的,如果它更好地支持alignas
/alignof
@Rook有答案的话。我建议你把它贴上去,这样就可以接受了。@Rook谢谢!是的,鲁克有答案!事实上,“某个程序员伙计”已经找到了答案,所以我很高兴我没有匆忙发帖!快速查看可以应用于union
s,并给出了一个与structs等一起使用的示例@Rook-但是您引用的警告文本显示“和标记类型”。这就是结构/类/联合。不难猜测,不知何故,它应用不当:)
template<class K> struct TTT{
union alignas(alignof(K)) {
// ^^^^^^^^^^^^^^^^^^^
// Note placement
char raw[sizeof(K)];
K rawK;
};
};