小编Ami*_* G.的帖子

C++ 11:正确的std :: array初始化?

如果我按如下方式初始化std :: array,编译器会给出一个关于缺少大括号的警告

std::array<int, 4> a = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题:

std::array<int, 4> a = {{1, 2, 3, 4}};
Run Code Online (Sandbox Code Playgroud)

这是警告信息:

missing braces around initializer for 'std::array<int, 4u>::value_type [4] {aka int [4]}' [-Wmissing-braces]
Run Code Online (Sandbox Code Playgroud)

这只是我的gcc版本中的一个错误,还是故意做的?如果是这样,为什么?

c++ arrays initialization c++11 c++14

60
推荐指数
4
解决办法
6万
查看次数

文本编辑器在语句上的垂直线

在其他文本编辑器中,例如Notepad ++,如果其他语句之间的语句有一条垂直线连接if到the elseelsethe end,这使得可视化解析变得更加容易.

示例(由黑框突出显示的垂直线): 在此输入图像描述

我想知道是否有办法在Visual Studio中执行此操作.

ide text-editor highlight visual-studio

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

如何用空终止字符memset char数组?

使用null终止字符memset整个字符数组的正确和最安全的方法是什么?我可以列出一些用法:

...
char* buffer = new char [ARRAY_LENGTH];

//Option 1:             memset( buffer, '\0', sizeof(buffer) );
//Option 2 before edit: memset( buffer, '\0', sizeof(char*) * ARRAY_LENGTH );
//Option 2 after edit:  memset( buffer, '\0', sizeof(char) * ARRAY_LENGTH );
//Option 3:             memset( buffer, '\0', ARRAY_LENGTH );
...
Run Code Online (Sandbox Code Playgroud)
  • 这些中的任何一个都有明显的优势吗?
  • 使用1,2或3可以面对哪些问题?
  • 处理此请求的最佳方法是什么?

c++ arrays memset null-terminated c++11

15
推荐指数
3
解决办法
7万
查看次数

我对将值分配给std :: array的方式有一些疑问

我正在codedope.com上学习C ++,并且已经在另一个网站Learncpp.com上阅读了一份文档。但是这两个网站有不同的方法将值分配给数组。

//codesdope.com

std::array<int,5> n  {{1,2,3,4,5}};
Run Code Online (Sandbox Code Playgroud)
//learncpp.com

std::array<int,5> n = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

哪种方法更准确?我应该选择哪种方式?它们之间有什么区别?

c++ c++11 c++14

6
推荐指数
1
解决办法
215
查看次数

为了更多的“const”成员函数而指定类成员互斥体“可变”是否“正确”?

在许多情况下,许多成员函数可以指定为“const” - 它们不会修改类的任何数据成员......几乎:它们会锁定/解锁类互斥锁。在这种情况下,指定互斥锁“可变”是一个好习惯吗? ...否则,将无法指定 get_a()、get_b()、get_c()、get_d() 'const'。

--

仅举一个例子。假设“example”是一个线程安全类,并且 m_mutex 保护其 get_a()、get_b()、get_c()、get_d() 不会修改的共享资源:

#include <mutex>

class example
{
public:
    size_t get_a(void) const {
        std::lock_guard lck(m_mutex);
        return m_str.length() + a;
    };

    size_t get_b(void) const {
        std::lock_guard lck(m_mutex);
        return m_str.length() * 2 + a + b;
    };

    size_t get_c(void) const {
        std::lock_guard lck(m_mutex);
        return m_str.length() * 4 + a + b;
    };

    size_t get_d(void) const {
        std::lock_guard lck(m_mutex);
        return m_str.length() * 8 + a;
    };

    void modify_something() {
        std::lock_guard lck(m_mutex);
        if …
Run Code Online (Sandbox Code Playgroud)

c++ oop mutex mutable c++11

6
推荐指数
1
解决办法
786
查看次数

为什么空IP地址将计算机名称解析为204.204.204.204?

如果我执行命令ping ""tracert ""它解析我当前的计算机名称.
但是,当我执行下面的代码时,它将计算机名称解析为'204.204.204.204'

#include <winsock2.h>
#include <ws2tcpip.h>
#include <string>
#include <iostream>

#pragma comment(lib, "Ws2_32.lib")

void get_computer_name(const std::string& ip_address, std::string& computer_name)
{
    WSADATA wsa_data;
    u_short port = 27015;
    struct sockaddr_in socket_address;
    char service_info[NI_MAXSERV] = {};
    WSAStartup(MAKEWORD(2, 2), &wsa_data);
    socket_address.sin_family = AF_INET;
    const auto error_code = InetPtonA(AF_INET, &ip_address[0], &socket_address.sin_addr.s_addr);

    socket_address.sin_port = htons(port);
    computer_name.resize(NI_MAXHOST);
    getnameinfo((struct sockaddr *) &socket_address,
            sizeof(socket_address),
            &computer_name[0],
            NI_MAXHOST, service_info, NI_MAXSERV, NI_NUMERICSERV);
    WSACleanup();
}

int main(int argc, wchar_t **argv)
{
    std::string computer_name;
    get_computer_name("", computer_name);
    std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ winapi winsock visual-c++

3
推荐指数
1
解决办法
224
查看次数

C2065'cout':未声明的标识符

所以我是C++的完整菜鸟,我正在尝试为作业制作一个简单的"Hello world"程序.我的代码如下:

#include "stdafx.h"
#include <iostream>
using namespace std;
int main() {
    cout<<"hello world!";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,VS2017正在抛出一个错误cout,说这是未定义的.我已经对旧帖子进行了一些阅读,并添加了#include "stdafx.h以查看是否可以按照旧建议解决它,但它继续给我错误.有任何想法吗?

编辑:

再一次完整的菜鸟,但是当我搜索它时会出现多个版本的stdafx.h,这里看起来像是"主要"的:

  // stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently

#pragma once

#ifndef STRICT
#define STRICT
#endif

#include "targetver.h"

[!if SERVICE_APP]
#define _ATL_FREE_THREADED
[!else]
#define _ATL_APARTMENT_THREADED
[!endif]

#define _ATL_NO_AUTOMATIC_NAMESPACE

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS  // some CString constructors will be explicit

[!if PREVIEW_HANDLER …
Run Code Online (Sandbox Code Playgroud)

c++ stl cout visual-studio visual-studio-2017

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

在C ++中用用户输入初始化数组大小的不同方法是什么

我想知道在c ++中执行以下代码段的一些替代方法。

int i;
cin >> i;
int arr[i];
Run Code Online (Sandbox Code Playgroud)

我最近开始研究竞争性编程并尝试学习更多。

编辑:对于那些不是cpp的评论。它使用我正在使用的类中正在使用的makefile成功编译,gcc -std=c++11 -o a.exe main.cpp并在输入长度为1时返回到控制台

array length: 1
Run Code Online (Sandbox Code Playgroud)

c++ arrays gcc stl c++11

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