在C ++中使用å¤åˆæ–‡å­—

时间:2018-05-09 02:15:10

标签: c++ arrays visual-studio static initializer-list

我想用compound literalåˆå§‹åŒ–Matrix4类型的å˜é‡ã€‚我的构造函数需è¦float*。

所以这是我的åˆå§‹åŒ–线:

const Matrix4 Matrix4::identity ( (float[16]) { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } );

这似乎应该å¯è¡Œï¼Œä½†Visual Studio称它是“éžæ ‡å‡†æ˜¾å¼ç±»åž‹è½¬æ¢â€ã€‚但我想ä¿ç•™â€œå•è¡Œåˆå§‹åŒ–â€ï¼Œé™¤éžçœŸçš„有更方便的方å¼ã€‚

1 个答案:

答案 0 :(得分:4)

您使用ä¸ç›¸å…³çš„é™æ€æˆå‘˜è¯¦ç»†ä¿¡æ¯ä½¿é—®é¢˜è¿‡äºŽå¤æ‚。事实上,这个问题å¯ä»¥å¾ˆå®¹æ˜“地å¤åˆ¶ä¸ºï¼š

void foo(float* );

void k() {
    foo((float[4]){1, 2, 3, 4});
}

这里有一个为C99定义的å¤åˆæ–‡å­—'。它在标准的C ++中ä¸å¯ç”¨ï¼Œä½†æ˜¯ä¸€äº›ç¼–译器具有支æŒå®ƒçš„扩展。从问题本身æ¥çœ‹ï¼Œä¼¼ä¹ŽMSVC也支æŒè¿™ç§æ‰©å±• - 它在消æ¯ä¸­æ到了这一点 - 但是ä¸å…许代ç ã€‚å¯èƒ½æœ‰ä¸€ç§æ–¹æ³•å¯ä»¥åœ¨MSVC上明确å¯ç”¨å®ƒï¼Œä½†æˆ‘ä¸æ˜¯è¿™æ–¹é¢çš„专家。

在这ç§æƒ…况下,我真的没有ç†ç”±å†™å‡ºä¸ç¬¦åˆè§„范的代ç ï¼Œå› æ­¤æˆ‘会æ倡å对它。

编辑åŽå›žç­”问题,实际上有几ç§æ–¹æ³•å¯ä»¥å®žçŽ°å•çº¿å‘¼å«ã€‚å¯ä»¥ä½¿å‡½æ•°æŽ¥å—std::initializer_list<float>表示å¯å˜æ•°é‡çš„å‚数,std::array<float, 16>表示固定数é‡çš„å‚数,或gsl::span。