std ::引用对

Ale*_* C. 32 c++ std

std::pair引用是否有效?特别是,赋值运算符是否存在问题?根据这个链接,似乎没有对operator =进行特殊处理,因此无法生成默认的assignement运算符.

我希望有一个pair<T&, U&>并且能够为其分配另一对(值或引用)并修改指向的对象.

Joh*_*itb 31

不,你不能在C++ 03中可靠地做到这一点,因为pair引用的构造函数T和创建对引用的引用在C++ 03中是不合法的.

请注意,我说"可靠".一些常见的编译器仍在使用(GCC,我测试GCC4.1,@Charles报道GCC4.4.4)不允许形成于基准的基准,但最近允许它作为他们执行基准崩溃(T&T,如果T是一个参考类型).如果您的代码使用了这些东西,那么在您尝试并查看之前,您不能依赖它来处理其他编译器.

听起来你想要使用它 boost::tuple<>

int a, b;

// on the fly
boost::tie(a, b) = std::make_pair(1, 2);

// as variable
boost::tuple<int&, int&> t = boost::tie(a, b);
t.get<0>() = 1;
t.get<1>() = 2;
Run Code Online (Sandbox Code Playgroud)


小智 25

在C++ 11中,您可以使用,并且该类型的对象将完全按照您的需要运行.std::pair<std::reference_wrapper<T>, std::reference_wrapper<U>>

  • `reference_wrapper` 将_有点_做 OP 想要的,在其接口范围内。当然,它消除了指针的视线 - 作为一个持有指针的类,它试图假装它不是一个指针...... AFAICT 它是为了解决使用函子等模板推导的限制 - 不是一般的-用途的东西。IMO 打字只是为了满足对原始指针的厌恶,这对我来说似乎是不公平的嘲笑,因为不使用它们作为所有者的好建议被推断到其他地方的奇怪极端......正如萨特所说,它们完全适合观察角色 (2认同)

sbi*_*sbi 7

我认为有std::pair住房参考是合法的.std::map采用std::pairconst类型,毕竟不能被分配到.

我想要一个pair<T&, U&>并能够分配另一对

分配将不起作用,因为您无法重置引用.但是,您可以复制初始化此类对象.

  • 我不想重置引用.我想要分配*引用的*对象. (3认同)

ybu*_*ill 5

你是对的。您可以创建一对引用,但不能operator =再使用。