【问题标题】:C++ Primer exercise 2.27 [5th ed.]C++ 入门练习 2.27 [第 5 版]
【发布时间】:2016-08-06 13:10:00
【问题描述】:

我正在做 C++ 入门第 5 版的练习 2.27,我对这个问题感到困惑:

练习:以下哪些初始化是合法的?解释原因。

(c) const int i = -1, &r = 0;

我得出的结论是 r 是非法的,因为这将与以下相同:

const int i = -1;
int &r = 0;

this github repo 建议 (c) 与以下相同:

const int i = -1;
const int &r = 0;

所以,这与我的回答相矛盾,请给我正确的答案。

P.S.:我是 C++ 语言的初学者。

【问题讨论】:

  • "我是 C++ 语言的初学者。" 那么 Stack Overflow 可能不适合你。
  • 你可以通过std::is_samedecltype查看编译器是否同意你:coliru.stacked-crooked.com/a/c0bb0ba07726c1e6
  • @πάνταῥεῖ 初学者当然可以在这里问初学者问题。只是它们必须是个初学者问题,与适用于我们其他人的标准相同。
  • 就像int 类型一样,限定符const 用于在同一声明语句中定义的所有变量。
  • 对初学者(和其他所有人)的提示是避免像const int i = -1, &r = 0; 这样的声明。只需在单独的行上声明每个变量,您不必想知道它的含义。

标签: c++ reference declaration qualifiers


【解决方案1】:

类型说明符 (int) 和限定符 (const) 属于声明中的所有声明符

const int i = -1, &r = 0;

因此声明符i&r 具有类型说明符和限定符const int。 此外,您可能不会写例如

int &r = 0;

因为临时对象(在本例中为表达式 0)可能不会绑定到非常量引用。

你可以写什么

int &&r = 0;

【讨论】:

  • 这是否也适用于volatile 限定符?
  • @silverwolf 这适用于 cv 限定符。
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2021-08-25
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多