【发布时间】:2014-09-11 12:58:52
【问题描述】:
pf.string() 输出似乎有一些奇怪的行为,其中pf 是用p.filename() 生成的,其中p 是boost::filesystem::path 类型并用char const* 或std::string.
这里是代码段:
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main(int argc, char **argv) {
fs::path p(argv[0]); // or fs::path p((std::string(argv[0])));
fs::path &&pf = p.filename(); // or fs::path pf = p.filename();
std::string const &name = p.filename().string();
std::cout << "*" << name << "*\n";
std::string const &p_name = pf.string();
std::cout << "*" << p_name << "*\t";
std::cout << "*" << name << "*\n";
std::string s_name = p.filename().string();
std::cout << "*" << s_name << "*\t";
std::cout << "*" << name << "*\n";
return 0;
}
这里的argv[0]是fs.out,可执行文件的输出(用clang3.4/gcc4.9和-O3/-O0编译)是:
**
*fs.out* **
*fs.out* *fs.out*
我使用的 boost 版本是 Debian jessie(testing) 包中的 1.55。
我的问题:
- 为什么
name在前两行是空的? - 为什么
p_name不是空的,而name在第 2 行是空的? - 尽管
s_name和name之间似乎没有关系,为什么这个程序在第 3 行有正确的(?)输出?
【问题讨论】: