我想知道在QT中将Qstring作为参数发送到函数的最有效和最实用的方法是什么,更具体地说.我想用一个参考.问题是我也想在函数本身中实例化该字符串,例如:
这是函数原型:
void myFunction(QString & theMsg);
Run Code Online (Sandbox Code Playgroud)
这是函数调用:
myFunction(tr("Hello StringWorld"));
Run Code Online (Sandbox Code Playgroud)
现在function tr()返回一个QString,但它不能用于引用(我可以看到原因).
我必须这样做:
QString theQstr("Hello StringWorld");
myFunction(theQstr);
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法在仍然使用引用时执行此操作,或者我可以只更改函数参数以使用QString,它仍然有效吗?
无论如何通过引用传递Object的属性?我知道我可以传递整个对象,但是我想指定要设置的对象的属性并检查它的类型,以便我知道如何解析.我应该采取另一种方法(无论如何我都无法改变原始物体)?
public class Foo{
public Foo(){}
public int Age { get; set; }
}
private void setFromQueryString(object aProperty, String queryString, HttpContext context)
{
//here I want to handle pulling the values out of
//the query string and parsing them or setting them
//to null or empty string...
String valueString = context.Request.QueryString[queryString].ToString();
//I need to check the type of the property that I am setting.
//this is null so I can't check it's type
Type t = aProperty.GetType();
}
private void …Run Code Online (Sandbox Code Playgroud) 我将一个未命名的临时对象传递给使用const ref参数定义的函数.该类的副本是私有的,我收到编译错误.我不明白为什么在这种情况下调用复制构造函数.
class A {
public:
A(int i) {}
private:
A(const A&) {}
};
void f(const A& a)
{
}
int main()
{
f(A(1)); // <-- error here: 'A::A(const A&)' is private
}
Run Code Online (Sandbox Code Playgroud)
正如所料,当我将主要更改为:
A a(1);
f(a);
Run Code Online (Sandbox Code Playgroud)
有用.
编辑:编译器是gcc 4.1.2
我有一个Human类,其功能可以接收任意数量的人,并确定某人是否比这些人中的任何人年长,然后返回一个他/她年龄大的人的数组.
func isOlderThan(people: Human...) -> [Human] {
var p: [Human]
for person in people {
if age > person.age {
p.append(person)
}
}
return p
}
Run Code Online (Sandbox Code Playgroud)
然而在
p.append(person)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
Variable p passed by reference before being initialized
Run Code Online (Sandbox Code Playgroud)
谁知道为什么会这样?谢谢!
目标
我想动态地将事件处理程序分配给整个站点的页面上的某些div.
我的方法
我使用jQuery绑定匿名函数作为选定div事件的处理程序.
问题
代码迭代div名称和相关URL的数组.div名称用于设置绑定目标,即将此事件处理程序附加到此div事件.
当事件处理程序成功绑定到每个div事件时,由这些事件处理程序触发的操作只会定位到数组中的最后一项.
所以我的想法是,如果用户将鼠标放在给定的div上,它应该为该div运行一个滑出动画.但相反,鼠标悬停在div1(rangeTabAll)上会触发div4的滑出动画(rangeTabThm).对于div 2,3等也是如此.顺序并不重要.更改数组元素,事件将始终以数组div4中的最后一个元素为目标.
我的代码 - (使用jQuery)
var curTab, curDiv;
var inlineRangeNavUrls=[['rangeTabAll','range_all.html'],['rangeTabRem','range_remedial.html'],
['rangeTabGym','range_gym.html'],['rangeTabThm','range_thermal.html']];
for (var i=0;i<inlineRangeNavUrls.length;i++)
{
curTab=(inlineRangeNavUrls[i][0]).toString();
curDiv='#' + curTab;
if ($(curDiv).length)
{
$(curDiv).bind("mouseover", function(){showHideRangeSlidingTabs(curTab, true);} );
$(curDiv).bind("mouseout", function(){showHideRangeSlidingTabs(curTab, false);} );
}
}
Run Code Online (Sandbox Code Playgroud)
我的理论
我要么没有看到一个令人眼花缭乱的语法错误或它的引用问题.最初我有以下语句来设置curTab的值:
curTab=inlineRangeNavUrls[i][0];
Run Code Online (Sandbox Code Playgroud)
因此,当发生问题我计算过,我改变了(通过for循环迭代)的参考curTab,我实际上改变了以前所有的匿名函数事件处理新curTab价值,以及参考....这是为什么事件处理程序始终以最后一个div为目标.
所以我真正需要做的是将curTab 值传递给匿名函数事件处理程序而不是curTab 对象引用.
所以我认为:
curTab=(inlineRangeNavUrls[i][0]).toString();
Run Code Online (Sandbox Code Playgroud)
会解决问题,但事实并非如此.同样的交易.所以很明显我错过了关于这个问题的一些关键,也许是非常基本的知识.谢谢.
javascript closures anonymous-function pass-by-reference pass-by-value
我应该在什么情况下更喜欢传递参考?传递的价值?
我根据我在其他StackOverflow问题中找到的内容,创建了一个函数来打印带有变量的prepared-statement-sql-string .
这是我的代码:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:Fatal error: Only variables can be passed by reference对于第3行.但是当我使用时
$sql = preg_replace('/\?/', "'" . $param . "'", $sql, 1);
对于第3行,它工作正常.
知道为什么吗?
在PHP 5中,您是否需要使用&修饰符通过引用传递?例如,
class People() { }
$p = new People();
function one($a) { $a = null; }
function two(&$a) { $a = null; )
Run Code Online (Sandbox Code Playgroud)
在PHP4中,您需要&修改器在进行更改后维护引用,但是我对我读过的关于PHP5自动使用pass-by-reference的主题感到困惑,除非明确克隆对象.
在PHP5中,是否 & 需要通过引用传递所有类型的对象(变量,类,数组......)?
数组是否默认通过ref或value传递?谢谢.
当不需要编写模板函数时,Eigen引入了Ref <>类来编写具有Eigen对象作为参数的函数,而不使用不必要的临时对象.人们可以在这里读到这一点.
当进一步搜索互联网时,我使用Ref <>类找到了几个不同的参数声明.在Eigen文档中,它们const Eigen::Ref<const Eigen::MatrixXf>&用于第一个示例中的只读参数.在第二个例子Eigen::Ref<Eigen::MatrixXd>中引入了读写参数,这里BUT const Eigen::Ref<const Eigen::MatrixXd>用于只读参数(无引用).所以我的问题是:
以下声明和我何时使用它有什么区别?`
const Eigen::Ref<const Eigen::MatrixXd>&const Eigen::Ref<const Eigen::MatrixXd>const Eigen::Ref<Eigen::MatrixXd>&const Eigen::Ref<Eigen::MatrixXd>Eigen::Ref<const Eigen::MatrixXd>&Eigen::Ref<const Eigen::MatrixXd>Eigen::Ref<Eigen::MatrixXd>&Eigen::Ref<Eigen::MatrixXd>为了完整性,我列出了const使用和参考的每种可能组合.
c++ ×4
php ×2
pointers ×2
.net ×1
arrays ×1
c# ×1
closures ×1
eigen ×1
eigen3 ×1
function ×1
gcc ×1
javascript ×1
object ×1
parameters ×1
properties ×1
qt ×1
str-replace ×1
string ×1
swift ×1
variables ×1