• 5035阅读
  • 3回复

[提问]QString 的一个问题 [复制链接]

上一主题 下一主题
离线michaelyes
 

只看楼主 倒序阅读 楼主  发表于: 2011-06-15
linux窗口程序设计——qt4精彩实例分析里面的geometry那个例子 其中有部分代码编译出来跟结果不一致
QString position ;
    position = temp.setNum(pos().x()) + ", " + temp.setNum(pos().y());

运行时显示的都是pos().x()),我是在windows上面运行的
离线jdwx

只看该作者 1楼 发表于: 2011-06-15
试试
position=QString::number ( pos().x() )+ ","+ QString::number ( pos().y() );
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线michaelyes

只看该作者 2楼 发表于: 2011-06-15
回 1楼(jdwx) 的帖子
虽然有很多方法可以替代,可是我想知道为什么那个语句不能达到预期的效果
离线dbzhang800

只看该作者 3楼 发表于: 2011-06-15
因为这条语句有问题,应当属于C++标准规定的未指定行为(fix me)

position = temp.setNum(11) + ", " + temp.setNum(22);
换个写法其实就是:
position = operator +(operator +(temp.setNum(11), ", "), temp.setNum(22));

调用了两个函数:
const QString operator+ ( const QString & s1, const char * s2 )
const QString operator+ ( const QString & s1, const QString & s2 )

对你的编译器来说,这条语句应该生成 11, 11  换其他编译器也可能会得到 11, 22

取决于你所用编译器对函数参数的求值顺序。

或许你可以瞄一眼:
http://hi.baidu.com/cyclone/blog/item/aa56e5dd1c3cf9e276c638fa.html
快速回复
限100 字节
 
上一个 下一个