考虑下面的简单程序,它尝试使用对其中元素的NON-const引用来遍历集合的值:
#include <set>
#include <iostream>
class Int
{
public:
Int(int value) : value_(value) {}
int value() const { return value_; }
bool operator<(const Int& other) const { return value_ < other.value(); }
private:
int value_;
};
int
main(int argc, char** argv) {
std::set<Int> ints;
ints.insert(10);
for (Int& i : ints) {
std::cout << i.value() << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译时,我从gcc收到错误:
test.c: In function ‘int main(int, char**)’:
test.c:18:18: error: invalid initialization of reference of type ‘Int&’ from expression of type …
Run Code Online (Sandbox Code Playgroud) 我在UNIX环境中工作,其中/bin
设置如下:
-rwxr-xr-x 1 root root 617144 Nov 19 2009 bash
lrwxrwxrwx 1 root root 4 Nov 23 2010 sh -> bash
Run Code Online (Sandbox Code Playgroud)
在我的环境中,我已经设置$BASH_ENV
为指向我的本地.bashrc:
env | grep BASH
BASH_ENV=/home/users/atomicpirate/.bashrc
Run Code Online (Sandbox Code Playgroud)
另外,.bashrc作为它的第一行echo BASHRC READ
.
我希望/ bin/sh和/ bin/bash的行为与此设置完全相同......但它们不会:
/bin/bash -c 'echo $BASH_ENV'
BASHRC READ
/home/users/atomicpirate/.bashrc
/bin/sh -c 'echo $BASH_ENV'
/home/users/atomicpirate/.bashrc
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,不读取.bashrc.知道为什么会这样吗?似乎符号链接打破了$ BASH_ENV的预期行为.