小编Ben*_*Ben的帖子

参考类型转换操作符:要求麻烦?

当我使用编译以下代码时 g++

class A {};

void foo(A&) {}

int main()
{
  foo(A());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

> g++ test.cpp -o test     
test.cpp: In function ‘int main()’:
test.cpp:10: error: invalid initialization of non-const reference of type ‘A&’ from a temporary of type ‘A’
test.cpp:6: error: in passing argument 1 of ‘void foo(A&)’
Run Code Online (Sandbox Code Playgroud)

经过一番反思,这些错误对我来说很有意义.A()只是一个临时值,而不是堆栈中的可分配位置,因此它似乎没有地址.如果它没有地址,那么我就不能对它进行引用.好的.

可是等等!如果我将以下转换运算符添加到类中A

class A
{
public:
  operator A&() { return *this; }
};
Run Code Online (Sandbox Code Playgroud)

一切都很好!我的问题是这是否远程安全.什么时候this指向何时A()构建为临时值?

事实上,我对此充满信心

void foo(const A&) {}
Run Code Online (Sandbox Code Playgroud)

可以根据g++我使用过的所有其他编译器接受临时值.该 …

c++ reference operators type-conversion operator-keyword

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

是否有可能确定哪些代码(根据`git blame`)受到`git diff`的每个hunk输出的影响?

根据代码受到影响的作者,我有一个大型的跨部门提交,我希望将其分开,以提高审阅者对他们正在审查的代码的熟悉程度,并公平地划分审阅负担.

我意识到责任可能会混合在一个特定的大块中,在这种情况下,收集多个评论者或者只选择最"应受谴责"的评论会很好(打破任意关系很好).

git

11
推荐指数
1
解决办法
1911
查看次数

在C++中,可变参数函数(在参数列表末尾带有...的函数)必须遵循__cdecl调用约定吗?

我知道__stdcall函数不能有省略号,但我想确保没有支持stdarg.h函数的平台来调用除__cdecl或__stdcall之外的约定.

c++ cdecl variadic-functions stdcall

7
推荐指数
1
解决办法
2141
查看次数