【问题标题】:literal and rvalue reference文字和右值引用
【发布时间】:2011-07-28 19:44:36
【问题描述】:
void test(int && val)
{
    val=4;
}

void main()
{  
    test(1);
    std::cin.ignore();    
}

int 是在调用 test 时创建的,还是在 c++ 中默认为 int 类型?

【问题讨论】:

  • 应该是test(int & val)
  • MSV10下调试模式至少代码编译
  • int && 是右值引用类型,是 C++0x 标准。
  • 是的,1 默认是int。如果你想改变它,那么你可以使用像ulll 这样的后缀。例如。 1ull 是一个 unsigned long long。

标签: c++11 rvalue


【解决方案1】:

请注意,您的代码将使用 C++11 编译器进行编译。

当您传递一个默认为int 类型的整型文字时,除非您编写1L,否则将创建一个int 类型的临时对象,该对象绑定到参数的功能。这就像以下初始化中的 first

int &&      x = 1; //ok. valid in C++11 only.
int &       y = 1; //error, both in C++03, and C++11
const int & z = 1; //ok, both in C++03, and C++11

【讨论】:

    【解决方案2】:

    在调用 test 时会创建一个值为 1 的 int。文字按其形式键入。例如,1 是 int,1.0 是 double,“1”是字符串。

    【讨论】:

    • "1"char const[2]
    • 不过,这非常具有误导性。 "1" 的类型不是“字符串”,也没有基本的“字符串”类型;如果有,那么大概"1""11" 将具有相同的类型,但它们没有。
    • 我知道没有基本的字符串类型;尽管如此,我们每天都在使用它们,与它们讨论和设计。因此是笑脸。
    • 那么你的整个最后一部分没有意义。 1L 也是“整数”,如“整数”。要么你的意思是你所说的,要么你没有。
    • 天哪。深呼吸,注意笑脸表示这不是一个严肃的声明,然后继续前进。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2020-01-03
    • 2016-04-24
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多