相关疑难解决方法(0)

2753
推荐指数
11
解决办法
81万
查看次数

复制初始化和直接初始化之间有区别吗?

假设我有这个功能:

void my_test()
{
    A a1 = A_factory_func();
    A a2(A_factory_func());

    double b1 = 0.5;
    double b2(0.5);

    A c1;
    A c2 = A();
    A c3(A());
}
Run Code Online (Sandbox Code Playgroud)

在每个分组中,这些陈述是否相同?或者在某些初始化中是否有额外的(可能是可优化的)副本?

我见过有人说过这两件事.请引用文字作为证据.还请添加其他案例.

c++ initialization

230
推荐指数
5
解决办法
5万
查看次数

演员可以明确吗?

当涉及构造函数时,添加关键字会explicit阻止热情的编译器在不是程序员的第一个意图时创建对象.这种机制是否也适用于铸造操作员?

struct Foo
{
    operator std::string() const;
};
Run Code Online (Sandbox Code Playgroud)

例如,在这里,我希望能够投入Foo到一个std::string,但我不希望这种投射是隐含的.

c++ casting explicit operator-keyword

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


'for i = 0'与'for'循环中的'int i(0)'(分配vs初始化count变量)

我在教科书和论坛中看到了很多代码,人们在for循环初始化中使用赋值运算符来开始重复.例如,

for ( int i = 0; i < 5; ++i )   // common 
for ( int i(0);  i < 5; ++i ) // uncommon 
Run Code Online (Sandbox Code Playgroud)

我知道初始化变量比分配变量更快.为什么人们更喜欢前者呢?

c++

13
推荐指数
2
解决办法
3735
查看次数

在初始化参考时何时以及为什么要获得副本?

有些情况下,我想要一个对象的引用,但我得到一个副本.这是一个例子:

  std::pair<const std::string, int> foo("hello", 5);
  const std::pair<std::string, int> & bar = foo;

  std::cout << "foo: " << foo.first << " " << foo.second << std::endl;
  std::cout << "bar: " << bar.first << " " << bar.second << std::endl;
  foo.second = 7;
  std::cout << "foo: " << foo.first << " " << foo.second << std::endl;
  std::cout << "bar: " << bar.first << " " << bar.second << std::endl;
Run Code Online (Sandbox Code Playgroud)

这会产生:

foo: hello 5
bar: hello 5
foo: hello 7
bar: hello …
Run Code Online (Sandbox Code Playgroud)

c++ reference

13
推荐指数
2
解决办法
598
查看次数

隐式转换和显式转换之间的区别

可能重复:
隐式VS显式转换

"隐式转换"和"显式转换"之间有什么区别?Java和C++的区别是什么?

c++ java implicit-conversion explicit-conversion

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

在java中增加char数据类型

我有以下代码

 class arr
  { 
    public static void main(String a[])
     {
       char c='A';
       c+=10;
        System.out.println(c);
        }
     } 
Run Code Online (Sandbox Code Playgroud)

从java 8编译时,它编译成功.

output ķ

但是当我编译下面的代码时:

class arr
{ 
  public static void main(String a[])
   {
    char c='A';
      c=c+10;
      System.out.println(c);
    }
 } 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

  logic.java:6: error: incompatible types: possible lossy conversion from int to char
  c=c+10;
    ^
Run Code Online (Sandbox Code Playgroud)

我不明白c=c+10,c+=10为什么我会收到这样的错误?请帮我.谢谢.

java

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