相关疑难解决方法(0)

C++中的POD类型是什么?

我有几次遇到这个术语POD型.这是什么意思?

c++ types c++-faq

919
推荐指数
8
解决办法
29万
查看次数

非类rvalues始终具有cv不合格类型

§3.10第9节说"非类别rvalues总是有cv不合格类型".这让我很奇怪......

int foo()
{
    return 5;
}

const int bar()
{
    return 5;
}

void pass_int(int&& i)
{
    std::cout << "rvalue\n";
}

void pass_int(const int&& i)
{
    std::cout << "const rvalue\n";
}

int main()
{
    pass_int(foo()); // prints "rvalue"
    pass_int(bar()); // prints "const rvalue"
}
Run Code Online (Sandbox Code Playgroud)

根据标准,对于非类型类型没有const rvalue,但bar()更喜欢绑定const int&&.这是编译器错误吗?

编辑:显然,this也是一个const rvalue :)

编辑:这个问题似乎在g ++ 4.5.0中得到修复,现在两行打印"rvalue".

c++ rvalue rvalue-reference c++11

33
推荐指数
1
解决办法
1163
查看次数

文字字符串和函数返回值是左值还是右值?

  1. 只是想知道文字字符串是左值还是左值.其他文字(如int,float,char等)是左值还是右值?

  2. 函数的返回值是左值还是右值?

你怎么说出差异?

c rvalue lvalue

30
推荐指数
1
解决办法
1万
查看次数

为什么const为隐式转换?

在广泛阅读ISO/IEC 14882,编程语言 - C++后,我仍然不确定为什么const需要使用单个参数构造函数隐式转换为用户定义的类型,如下所示

#include <iostream>

class X {
public:
   X( int value ) {
      printf("constructor initialized with %i",value);
   }
}

void implicit_conversion_func( const X& value ) {
   //produces "constructor initialized with 99"
}

int main (int argc, char * const argv[]) {
   implicit_conversion_func(99);
}
Run Code Online (Sandbox Code Playgroud)



从第4节第3行开始

当且仅当声明T t = e时,表达式e可以隐式转换为类型T. 对于一些发明的临时变量t(8.5),其形式良好.某些语言结构要求将表达式转换为布尔值.在这样的上下文中出现的表达式e被称为在上下文中转换为bool并且当且仅当声明bool t(e)时才是格式良好的; 对于一些发明的临时变量t(8.5),其形式良好.隐式转换的效果与执行声明和初始化相同,然后使用临时变量作为转换的结果.如果T是左值引用类型(8.3.2),则结果是左值,否则为右值.当且仅当初始化将其用作左值时,表达式e用作左值.

接下来,我在8.5行6中找到了与用户定义类型相关的初始化器部分

如果程序要求对const限定类型T的对象进行默认初始化,则T应为具有用户提供的默认构造函数的类类型.

最后,我以12.3第2行结束了有关用户定义的转换的信息

用户定义的转换仅在明确无误的情况下应用(10.2,12.3.2).

不用说,10.2和12.3.2没有回答我的问题.

  1. 有人可以了解const隐含转换的影响吗?
  2. 是否使用const12.3第2行使转换"明确"?
  3. 是否会const以某种方式影响第4节中谈到的左值与右值?

c++ constructor const rvalue implicit-conversion

12
推荐指数
1
解决办法
3075
查看次数

C++是否重视POD typedef的初始化?

C++是否在简单的POD typedef 上进行值初始化?

假设

typedef T* Ptr;
Run Code Online (Sandbox Code Playgroud)

Ptr()
Run Code Online (Sandbox Code Playgroud)

做值初始化并保证相等(T*)0

例如

Ptr p = Ptr();
return Ptr();
Run Code Online (Sandbox Code Playgroud)

c++ pointers

9
推荐指数
1
解决办法
1212
查看次数