TTBOMK,有三种方法可以在C++中初始化变量.
int x = 0; // C-like initialization
int x (0); // Constructor initialization
int x {0}; // Uniform initialization
Run Code Online (Sandbox Code Playgroud)
为C++ 11引入了统一初始化,以便为初始化不同类型的变量提供更加统一的语法,这需要在C++ 03中使用不同的语法.
C-like,构造函数和统一初始化之间有什么区别?我应该总是使用统一初始化吗?
我的直觉是不是.我遇到以下情况:
class PluginLoader
{
public:
Builder* const p_Builder;
Logger* const p_Logger;
//Others
};
PluginLoader::PluginLoader(Builder* const pBuilder)
:p_Builder(pBuilder), p_Logger(pBuilder->GetLogger())
{
//Stuff
}
Run Code Online (Sandbox Code Playgroud)
或者我应该更改构造函数并Logger* const从构造的位置传递一个PluginLoader?
在ScheduledExecutorService中运行时,是否有一种很好的方法可以阻止任务内部重复任务?
可以说,我有以下任务:
Future<?> f = scheduledExecutor.scheduleAtFixedRate(new Runnable() {
int count = 0;
public void run() {
System.out.println(count++);
if (count == 10) {
// ??? cancel self
}
}
}, 1, 1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
从外面看,很容易通过f.cancel()取消,但是如何在指定的地方停止重复?(通过AtomicReference传递Future是不安全的,因为当scheduleAtFixedRate返回f迟到且变量设置得太晚时,有一个潜在的窗口,并且任务本身可能已经运行,在引用中看到null.)
java concurrency anonymous-class executorservice variable-initialization
a为a a1(),它不会引发错误,但不会调用构造函数.为什么会这样?我的代码:
#include<iostream>
using namespace std;
class a
{
public:
a()
{
cout << "in a\n";
}
};
int main()
{
a a1();
a a;
}
Run Code Online (Sandbox Code Playgroud) 这是初始化类变量的两种方法.
class Test {
private $var1;
private $var2;
public function Test($var1,$var1) {
$this->var1 = $var1;
$this->var2 = $var2;
}
}
$objTest = new Test("value1","value2");
Run Code Online (Sandbox Code Playgroud)
class Test {
private $var1;
private $var2;
public function _set($var, $value) {
$this->$$var = $value
}
}
$objTest = new Test();
$objTest->_set('var1','value1');
$objTest->_set('var2','value2');
Run Code Online (Sandbox Code Playgroud)
现在,这两种方法都是有效的,但我想知道哪种方法更好?只坚持一种方法的利弊是什么?
你更喜欢哪个?为什么"
String myString = null;
if(someCondition)
myString = "something";
else
myString = "something else";
Run Code Online (Sandbox Code Playgroud)
要么
String myString = "";
if(someCondition)
myString = "something";
else
myString = "something else";
Run Code Online (Sandbox Code Playgroud)
我知道使用三元(?:)运算符是可能的,但我想知道上面两个.
当我调用函数来获取值时,我通常初始化varible,以防函数失败或不返回任何内容,我想避免处理未初始化的变量.我对字符串,整数或任何其他类型都这样做.
整数变量的示例:
vPropValue := 0;
vPropValue := GetPropValue(vObject,'Height');
IF vPropValue > 0 Then
...
Run Code Online (Sandbox Code Playgroud)
这是我最常用的方式.
我知道我可以使用:
If GetPropValue(vObject,'Height') > 0 Then
...
Run Code Online (Sandbox Code Playgroud)
但是在第一个例子中,我避免多次调用函数,如果我稍后需要在代码中再次得到结果.
对于字符串也是一样的(即使我知道本地字符串被初始化为空字符串,而整数不是可以保存任何值)
vName := '';
vName := GetObjectName(vObject,'ObjectName');
IF Trim(vPropStrValue) <> '' Then
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以采取措施避免重复的值赋值,比如确保函数在所有内容都失败时返回0.但是我有100多个函数而且我不能依赖我从来没有弄错过函数如何处理所有事情而且我确定有些人不会返回0,如果一切都失败了.
我试图理解为什么这不是理想的做法以及如何最好地避免它.
编辑
以下是函数未返回正确值或0的示例:
function GetValue(vType:integer):integer;
begin
if vType=1 then
Result:=100
else if (vType>2) and (vType<=9) then
Result:=200;
end;
procedure TForm1.Button1Click(Sender: TObject);
var vValue:integer;
begin
vValue:=GetValue(11);
Button1.Caption:=IntToStr(vValue);
end;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,函数返回的值是一些随机数.
在这种情况下,初始化似乎是有效的方法.或不?
编辑2:
正如大卫在他的回答中指出的那样,正确的是,有一个警告
[dcc32 Warning] Unit1.pas(33): W1035 Return value of function 'GetValue' might be …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
int *numberArray = calloc(n, sizeof(int));
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么会收到以下错误.
Cannot initialize a variable of type 'int *' with an rvalue of type 'void *'`.
Run Code Online (Sandbox Code Playgroud)
谢谢.
我很想知道声明变量和初始化变量之间的区别.例如
var example; // this is declaring
var example = "hi" // initializing? Or just "adding a value"?
Run Code Online (Sandbox Code Playgroud)
我不认为我就在那里,但每个人的定义究竟是什么?或者他们基本上是同一个意思?
在一篇关于如何在Java中初始化对象的文章中,有一段如下:
在对象生命的开始,Java虚拟机(JVM)在堆上分配足够的内存以容纳对象的实例变量.但是,首次分配该内存时,它包含的数据是不可预测的.如果按原样使用内存,则对象的行为也是不可预测的.为了防范这种情况,Java确保在任何代码使用内存之前初始化内存,至少是可预测的默认值.
任何人都可以解释这是什么意思unpredictable data和unpredictable behavior在这里.提前致谢
c++ ×3
java ×3
class ×2
c ×1
c++03 ×1
c++11 ×1
concurrency ×1
conditional ×1
constructor ×1
delphi ×1
delphi-xe7 ×1
javascript ×1
php ×1
pointers ×1
preferences ×1