相关疑难解决方法(0)

在C#中使用var关键字

在与同事讨论了在C#3中使用'var'关键字后,我想知道人们对通过var的类型推断的适当用途有什么看法?

例如,我在可疑情况下懒得使用var,例如: -

foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
Run Code Online (Sandbox Code Playgroud)

var的更合理用途如下: -

var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
Run Code Online (Sandbox Code Playgroud)

有趣的是LINQ似乎有点灰色,例如: -

var results = from r in dataContext.SomeTable
              select r; // Not *entirely clear* what results will be …
Run Code Online (Sandbox Code Playgroud)

c# var type-inference

406
推荐指数
32
解决办法
13万
查看次数

未初始化的局部变量是最快的随机数发生器吗?

我知道未初始化的局部变量是未定义的行为(UB),并且该值可能具有可能影响进一步操作的陷阱表示,但有时我想仅使用随机数进行可视化表示,并且不会在其他部分使用它们.例如,程序在视觉效果中设置具有随机颜色的东西,例如:

void updateEffect(){
    for(int i=0;i<1000;i++){
        int r;
        int g;
        int b;
        star[i].setColor(r%255,g%255,b%255);
        bool isVisible;
        star[i].setVisible(isVisible);
    }
}
Run Code Online (Sandbox Code Playgroud)

是不是比它快

void updateEffect(){
    for(int i=0;i<1000;i++){
        star[i].setColor(rand()%255,rand()%255,rand()%255);
        star[i].setVisible(rand()%2==0?true:false);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且还比其他随机数发生器更快?

c c++ undefined-behavior garbage

319
推荐指数
16
解决办法
2万
查看次数

在C++中使用auto声明变量是否存在缺点?

这似乎auto是一个相当重要的功能,在C++ 11中添加似乎遵循许多较新的语言.与像Python这样的语言一样,我没有看到任何显式变量声明(我不确定是否可以使用Python标准).

使用auto声明变量而不是显式声明它们有缺点吗?

c++ type-inference auto c++11

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

新关键字"自动"; 什么时候应该用它来声明一个变量类型?

可能重复:
使用C++ 0x auto关键字多少钱

我们(作为社区)是否有足够的经验来确定何时和/或是否滥用汽车?

我真正想要的是最佳实践指南

  • 什么时候使用auto
  • 何时应该避免

简单的经验法则可以在80%的情况下快速遵循.

由于上下文这个问题由我的回应引发了这里

c++ type-safety auto c++11

88
推荐指数
4
解决办法
7万
查看次数

有没有办法在PC中将auto作为参数传递?

有没有办法将auto作为参数传递给另一个函数?

int function(auto data)
{
    //DOES something
}
Run Code Online (Sandbox Code Playgroud)

c++ arguments function auto

35
推荐指数
3
解决办法
2万
查看次数

这是lambda表达式的有效(ab)使用吗?

就像我们都知道的那样,break从外部循环中嵌套循环并不容易,没有:

虽然,你必须承认,所有这些都有点笨拙.特别是函数版本缺少,因为缺少调用循环的上下文,因为您需要将循环中所需的所有内容作为参数传递.
另外,第二个对于每个嵌套循环都会变得更糟.
所以,我个人仍然认为该goto版本是最干净的.


现在,考虑所有C++ 0x和东西,第三个选项带给我这个想法利用lambda表达式:

#include <iostream>

bool CheckCondition(){
  return true;
}

bool CheckOtherCondition(){
  return false;
}

int main(){
  [&]{while(CheckCondition()){
    for(;;){
      if(!CheckOtherCondition())
        return;
      // do stuff...
    }
    // do stuff...
  }}();
  std::cout << "yep, broke out of it\n";
}
Run Code Online (Sandbox Code Playgroud)

(Ideone的例子.)

这允许return第三种选择提供的简单的语义美,同时不会遇到上下文问题并且(几乎)像goto版本一样干净.它比任何上述选项都更短(以字符为单位).


现在,我已经学会了在找到语言的美妙(ab)使用后保持喜悦,因为几乎总有一些缺点.这个有什么吗?或者甚至有更好的方法来解决这个问题?

c++ lambda break nested-loops c++11

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

什么时候适合在C++中使用'auto'?

我正在努力为自己提出一些一致的规则,以便何时在C++程序中使用'auto'.这是我的pro/con列表,也许你可以通过给我你的意见来帮助我.

优点:

  • 'auto'适用于避免复杂和大型模板声明(例如auto的经典用例,用于在STL容器上定义迭代变量)

  • 'auto'适用于面向未来的代码.例如,如果我有一个int数组并且我想将它更改为无符号整数,如果我在引用该数组的元素时使用'auto',则会自动更新.当然,如果我为数组使用了typedef,那也会发生.

缺点:

  • 'auto'使代码难以阅读.我不知道声明是指针还是值.我不知道它是否有构造函数和析构函数.

  • 'auto'让我很懒.我可以忘记类型,只需编写代码.但在C++中,类型对程序的语义非常重要.

你们什么时候使用Auto?你何时不喜欢使用它?

c++ design-patterns auto

11
推荐指数
0
解决办法
288
查看次数

C++ 11中的auto是否会使编译时间更长?

auto abc = 5566;
Run Code Online (Sandbox Code Playgroud)

据我所知,编译器知道abcint在编译时,所以它不会影响运行时性能.

但是,它是否会使编译时间更长?

提前致谢.

c++ performance c++11

11
推荐指数
1
解决办法
2275
查看次数

C++ 11类型演绎与const char*

GotW 94中,Herb Sutter区分了"经典C++"声明

const char* s = "Hello";
Run Code Online (Sandbox Code Playgroud)

和"现代"风格

auto s = "Hello";
Run Code Online (Sandbox Code Playgroud)

他告诉我们,有一个"中的类型细微的差别s,这里的auto风格是比较正确的." [编辑补充:评论表明,这可能不是Sutter实际意义的公平表示; 见下面的讨论.]

但是......有什么区别?我的印象是a const char *是引用字符串文字的正确方法.此外,当我问我的调试器(lldb)时,它似乎认为类型实际上是相同的:

* thread #1: tid = 0x1756c2, 0x0000000100000f8f test`main + 31 at test.cc:4, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100000f8f test`main + 31 at test.cc:4
   1    int main(void) {
   2        const char* s = "Hello";
   3        auto t = "Hello";
-> 4        return 0;
   5    }
(lldb) fr v
(const …
Run Code Online (Sandbox Code Playgroud)

c++ char auto c++11 gotw

10
推荐指数
2
解决办法
571
查看次数

使用索引与迭代器迭代向量到倒数第二个元素

当从C++ 11的开头迭代std::vector到第二个到最后一个元素时,首选的样式是什么?

std::vector<const char*> argv;
std::string str;
Run Code Online (Sandbox Code Playgroud)

应该使用这种更多的C++ - esque方法

for (const auto& s: decltype(argv)(argv.begin(), argv.end()-1)) {
    str += std::string(s) + ' ';
}
Run Code Online (Sandbox Code Playgroud)

还是应该采用更传统的方式?

for (size_t i = 0; i < argv.size() - 1; ++i) {
    str += std::string(argv[i]);
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector std c++11

9
推荐指数
2
解决办法
499
查看次数