问题标签 [pass-by-const-reference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - const 引用函数参数的地址何时是唯一的?
在下面的示例代码中,我想知道两个调用何时log_cref_address会可靠地打印相同的地址。
在我的机器上,main打印
从许多这样的输出中,我观察到其main行为如下:
- 前三个调用
foo打印相同的地址。 - 最后两次调用
foo(来自线程)打印前三个调用未打印的地址。 - 在对 的最后两次调用中
foo,log_cref_address当且仅当从子线程调用时打印相同的地址。
在任何机器上,哪些行为(如果有)是由 C++ 标准保证的?
c++ - 当 const 引用参数绑定到右值时,它是否保持其“状态”?
设为T任意类型。考虑一个采用const[lvalue] 引用的函数:
假设此函数在内部调用另一个函数,该函数具有右值引用重载:
如果我们将 rvalue 传递给f,是否会调用 rvalue 引用重载g,还是会因为它已“转换”/绑定到const左值引用而无法调用?
类似地,如果f调用一个T按值获取实例的函数,
并且T有一个移动构造函数(即T(T &&);),将调用移动构造函数,还是调用复制构造函数?
总之,如果我们想确保在调用f右值时,传递右值引用以保持其右值“状态”,我们是否必须提供右值引用重载f?
c++ - 编译器在不需要复制构造函数时会关心它
为什么编译器在不需要复制构造函数时会关心它?
函数print被重载以接受const Foo&但编译器产生以下编译错误:
为什么会这样?显然我们不需要复制构造函数,因为我们通过foo引用传递并且我们有重载print。
c++ - Can we have a setter member function as const referenced from a const object?
I have a class like this :
I want to know that if my objects for XYZ are referenced as const everywhere in my codebase, can I use these setters? P.S. I have tried with const Setters and it doesn't work (I knew it doesn't make much sense but I was stuck in the compilation error so tried it anyway)
c++ - 为什么 string_view::operator== 按值接受参数
我正在阅读 string_view 的源代码,发现 operator== 按值接受参数。
为什么它按值接受参数,而不是通过 const 引用?
c++ - 通过非常量引用参数修改 const 引用参数
考虑以下代码:
- 函数
f有两个引用参数:int const& a和int& b. 因此,f应该不修改a,但可以修改b,而且确实可以。 - 但是,在 中
main,我传递了由和引用的同一个变量。作为修改,它也修改,它应该不应该修改abfba
此代码在没有任何警告的情况下编译并打印3. 如果我们单独跟踪每个变量,看起来 const 正确性受到尊重:c是非常量的,因此将它作为constref as传递a,也可以作为非常量ref as 传递,并且在我们b的主体内传递它是完全可以的fmodify b,它是非常量的,而不接触a,它是 const 。然而,当casa和 as使用时b,a在 的主体内被修改f,违反了 const 的假设a,即使没有const_cast调用显式。
我尽可能简单地制作了这个示例,但人们很容易想到不那么明显的用例(例如const作用于非常量引用参数的方法)。
我的问题是:
- 我们真的可以说上面的代码是 const 正确的吗?
- 上述用例是已知模式吗?它被认为是不好的做法吗?
- 除了让读者感到困惑之外,上面的代码是否会成为技术问题的根源?例如未定义的行为,或者编译器执行错误的简化假设?
c++ - C++ const 引用模板函数参数类型本身就是一个引用,为什么?
我有以下功能:
但是,我遇到的问题是编译器告诉我 T 实际上不是它的任何类型,而是对它的引用。这怎么可能,在什么情况下 const 引用的模板参数本身引用?
请注意,我可以通过以下方式解决上述问题:
但我想了解 T 本身在什么情况下可以作为参考。
swift - 为什么我们不能在 swift 中通过引用 inout 函数来传递 const 值?
在 C 中,虽然我们将值声明为const int a = 5;,但我们可以传递&a给声明为 的函数void someFun(const int *);。
根据经验,在 C 语言中,当不需要更改原始值时,i) 如果对象的大小小于或等于指针的大小,则按值传递,ii) 否则按将整个值复制到函数的 const 引用会占用更多资源。
但是在 swift 中,即使 inout 参数没有在函数中修改,我们也不能将声明为的值传递给声明为let a = 5的函数someFun(_ z: inout Int) -> ()。因此,我们必须将函数中的 z 标记为 let。这会将整个值复制到函数中。如果 a 类型的大小很大,这可能会花费更多。有解决方法吗?
c++ - 参考 std::thread 参数
我有两个功能
我会做
但是我不能创建std::thread t2(g, x),在这种情况下我需要 makestd::ref(x)而不是 just x,为什么有必要?
为什么可以在t1没有的情况下进行创建std::cref?