如果我按如下方式初始化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版本中的一个错误,还是故意做的?如果是这样,为什么?
在其他文本编辑器中,例如Notepad ++,如果其他语句之间的语句有一条垂直线连接if
到the else
和else
the end
,这使得可视化解析变得更加容易.
我想知道是否有办法在Visual Studio中执行此操作.
使用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)
我正在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)
哪种方法更准确?我应该选择哪种方式?它们之间有什么区别?
在许多情况下,许多成员函数可以指定为“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) 如果我执行命令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++的完整菜鸟,我正在尝试为作业制作一个简单的"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 ++中执行以下代码段的一些替代方法。
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)