作者asdfg1597860 (Jay)
看板C_and_CPP
标题[问题] 不同版本编译出现不同结果
时间Fri Nov 2 09:49:40 2018
开发平台(Platform): (Ex: Win10, Linux, ...)
WIN10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS2003 、VS2015
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
A.cpp
double* m_t_Matrix;
m_t_Matrix = new double[16];
double *&t_refer = m_t_Matrix;
GetMode(t_refer);
B.cpp
double* m_SecMatrix;
m_SecMatrix = new double[16];
GetMode(const double* &m_t_matrix)
{
m_t_matrix = m_SecMatrix;
}
补充说明(Supplement):
各位前辈好
上面片段程式可以在VS2003上执行
不过在VS2015会发生错误
1.const double *&(非常数限定的)的参考不能以类型double* 的值初始化
2.无法将引数从double* 转换为 const double *&
目前我的想法是A.cpp中 t_refer 是一个初始化为m_t_Matrix的double指标引用
而B.cpp中的函式会将带进来的变数作为const 指针本身的值可以改变指向的内容不可以改变
m_t_matrix 前加入& 作为传参考 所以他相当於读m_t_Matrix作计算
那在A.cpp中直接函式带入m_t_Matrix 不就可以了?
且想请问各位前辈这段程式用法是合理的吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.127.200.146
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1541123383.A.81A.html
1F:推 steve1012: 你看能不能把你想要做的事讲的更清楚一点 11/02 10:39
我透过B.cpp 计算 m_SecMatrix 这个矩阵主要储存当下模型的位置
然後A.cpp 由t_refer得到矩阵 再由m_t_Matrix去作运算画出画面
※ 编辑: asdfg1597860 (59.127.200.146), 11/02/2018 11:31:03
2F:推 LPH66: pass by reference 并不是宣告一个参考变数丢进去 11/02 12:22
3F:→ LPH66: 而是传一个普通变数, 函数里会知道你这普通变数是参考至谁 11/02 12:23
确实 不过这是之前工程师的Code 但年代久远不晓得他当时写的时空背景
※ 编辑: asdfg1597860 (59.127.200.146), 11/02/2018 13:43:29
4F:推 steve1012: 你只是想设值的话传pointer 就行了吧 为何要new两次? 11/02 16:39
A.cpp 的new 我也觉得不需要 不过B.cpp 会做运算所以确实需要new
※ 编辑: asdfg1597860 (59.127.200.146), 11/02/2018 17:51:16