temporary-objects相关内容
我的一个朋友给我看了一个C++20的程序: #include struct A { A() {std::cout
..
给定矩阵模板类mat,下面的成员函数允许我高效地转置行向量或列向量,因为它们具有相同/相应的内存占用: template struct mat { // ... template
..
我在 gcc 中编译一些可移植代码时遇到了这个问题.基本上这个奇怪的代码在 Visual Studio 中编译,这真的让我大吃一惊: class Zebra {int x;};斑马 goo() {斑马 z;返回z;}void foo(斑马 &x){斑马 y;x = y;富(咕());} Visual Studio 让这个飞起来.gcc 会将此作为编译错误捕获.有趣的是,如果你将 Zebra 类
..
这个代码是 UB 吗? 结构 A{无效非常量(){}};常量 A&a = A{};const_cast(a).nonconst(); 换句话说,(临时)对象最初是const吗?我浏览了标准,但找不到答案,因此希望能引用相关部分的内容. 编辑: 对于那些说 A{} 不是 const 的人,那么你能做到 A{}.nonconst() ? 解决方案 引用a的初始化由[dcl.i
..
char f1();无效 f2(char&);结构 A {};一个 f3();无效 f4(A&);主函数(){f2(f1());//错误 C2664.这正如预期的那样.f4(f3());//行!为什么???} 错误 C2664: 'void f4(char &)' : 无法从 'char' 转换参数 1到 'char &' 有人告诉我,在 C++ 中,非常量引用参数不能绑定到临时对象;而在
..
我想检查一下我对此事的理解和结论. 在 IRC 上,有人问: const_cast 是否可以接受绑定到临时对象的 const 引用? 翻译:他有一个 ref-to-const 绑定到一个临时的,他想抛弃它的 const-ness 来修改它. 我的回答是我问过 a之前类似的问题,其中的共识似乎是临时人员本身并不是天生的const,因此您可以摆脱引用的const-ness您必须
..
char f1();void f2(char&);结构体{};一个 f3();void f4(A&);int main(){f2(f1());//错误 C2664.这正如预期的那样.f4(f3());//行!为什么???} 错误 C2664:“void f4(char &)":无法从“char"转换参数 1'char &' 我被教导在 C++ 中,非常量引用参数不能绑定到临时对象;在上面的
..
我想检查一下我对此事的理解和结论. 在 IRC 上,有人问: const_cast 是否可以接受绑定到临时对象的 const 引用? 翻译:他有一个 ref-to-const 绑定到一个临时对象,他想抛弃它的 const-ness 来修改它. 我的回答是我问了a之前类似的问题,其中的共识似乎是临时变量本身并不是固有的 const,因此您可以摆脱引用的 const-ness你
..
在问这个问题时,我学会了const引用到临时对象在 C++ 中是有效的: int main(){整数 a = 21;整数 b = 21;//错误:非常量引用的初始化无效//int &总和 = a + b;e [...]//行int const &总和 = a + b;返还金额;} 但是在下面的例子中,const 引用 refnop 引用了一个被破坏的临时对象.我想知道为什么? #includ
..
编辑:感谢所有指出问题并在 Stack Overflow 上讨论过的人.我自己投了最后一票. 一个相关的问题:ostringstream 或 ostringstream::str 状态它是一个临时的.怎么这么多人知道?还是我应该查阅不同的文档? 我在带有 GCC 4.7.2、-std=c++11 和 std::ostringstream 的 Debian 7.3 (x64) 下的内存错
..
给定以下代码: #include 结构体implicit_t{隐式_t(int x) :x_m(x){std::cout
..
我在 gcc 中编译一些可移植代码时遇到了这个问题.基本上这个奇怪的代码在 Visual Studio 中编译,这真的让我大吃一惊: class Zebra {int x;};斑马 goo() {斑马 z;返回 z;}void foo(Zebra &x){斑马 y;x = y;foo(goo());} Visual Studio 让这个飞起来.gcc 会将其作为编译错误捕获.有趣的是,如果您将
..
我有两个具有以下结构的类: struct A {一个转换()常量;};结构体 B {//返回一个临时 A运算符*() const;}; * 运算符在这里可能看起来有点奇怪,但考虑到它的使用上下文实际上非常自然.事实上,B 的存在只是为了为嵌入式语言提供一些语法糖,因此它的方法和运算符旨在为代码提供所需的外观.给定B b,获取关联的A 很快,*b.有时我想立即调用 A 上的转换.目前,这需要一些
..
经常听到在C ++中,临时对象在 full-expression 的末尾被解构. full-expression 被定义为不是某些其他表达式的子表达式的表达式.这听起来与我的声明的概念非常相似. 所以我的问题是:如果我在 full-expression 后面加上分号,它将始终是声明吗?可以通过在结尾加上分号的陈述并删除该分号来得出每个 full-expression .我可以假设每个临时文件
..
"15.6.2初始化基和成员"(N4713)节具有以下第11项的示例: 结构A {A()=默认值;//好的A(int v):v(v){}//确定const int&v = 42;//好的};A1;//错误:临时表到引用的格式不正确的绑定a2(1);//好吧,不幸的是 示例最后一行中的构造有什么不幸? 我在整个参考书中搜索了其他允许的“不幸"行为的出现,但没有找到. 如果在此特定情
..
我有以下代码: string join(initializer_list strings); initializer_list是std :: initializer_list,而string_view不是std :: string视图,但是与const string&的构造函数非常相似的类和const char *. 然后我得到了join的调用: E
..
我编写了一个简单的程序,以了解有关C ++中创建和销毁对象的顺序的更多信息(使用Visual Studio 2015).在这里: #include #include using namespace std; class A { public: A(string name) : name(name) {
..
我有一个std::wstring decode(const char *s)函数. 我这样使用它: const char *src = "some string"; const wchar_t *result = decode(src).c_str(); 我总是在result[0]中得到垃圾,有时也在result[1]中得到垃圾. 当我以其他方式使用它时,我不会得到垃圾:
..
下面的代码标准正确吗? ( godbolt ) 即by-ref捕获表示临时引用的转发引用,并从函数在同一表达式内返回结果的lambda按值. 当然,存储lambda供以后使用会使它包含一个悬挂的引用,但是我指的是main内部的确切用法. 我对此SO答案以及可能的“标准引用中的引用捕获生存期规则捕获了变量,而不是数据及其作用域". –这似乎表明捕获的对临时变量的引用在以下情况下可能
..
在C ++中(如果错了,请纠正我),通过常量引用进行的临时绑定应该比它绑定的表达式的寿命更长.我以为在Rust中也是如此,但是在两种不同的情况下,我会得到两种不同的行为. 考虑: struct A; impl Drop for A { fn drop(&mut self) { println!("Drop A.") } } struct B(*const A); impl Drop
..